私はReactJSをMaterial-UIで使用しています。リフレッシュ後または戻るボタンを押したときにAppBarの内容が正しくない
メインメニュー/ナビゲーションバーとして使用されるAppBarコンポーネントがあります。私は、AppBarコンポーネントのタイトルに私がいるページを反映させたいと思います。したがって、ユーザーを/ loginにルーティングするボタンを押すと、AppBarコンポーネントのタイトルを「ログイン」に変更することもできます。私はこれを達成しましたが、いくつかの副作用があるようですので、それが適切な習慣であるとは思えません。現時点で
は、私のアプリケーションバーのコンポーネントがそうのようになります。私のコンストラクタで
render() {
let MenuOptionsNotLogged = ({}) => (
<div>
<FlatButton
label="Log In"
containerElement={<Link to="/login" />}
secondary
linkButton
onClick={this.switchToLogin}
/>
</div>
);
return (
<div>
<MuiThemeProvider muiTheme={muiTheme}>
<div className="headerDiv">
<AppBar
className="appBar"
showMenuIconButton={this.state.appBarIcon}
title={this.state.appBarTitle}
iconElementRight={<MenuOptionsNotLogged />}
iconElementLeft={<IconButton><BackIcon /></IconButton>}
/>
</div>
</MuiThemeProvider>
</div>
);
、私はアプリケーションバー(タイトルやアイコン)のデフォルト状態を設定します。
constructor(props, context) {
super(props, context);
this.switchToLogin = this.switchToLogin.bind(this);
this.state = {
appBarTitle: 'Home',
appBarIcon: false
};
}
そして、ユーザーがログインページに移動するときに、タイトルとアイコンを変更する機能があります。
問題
これは機能しますが、ユーザーがブラウザの[戻る]ボタンをリフレッシュまたはヒットするといくつか問題があります。
など。ユーザーは/ loginに移動し、タイトルは "Login"に変更され、ユーザーはブラウザを更新します。その後、ユーザーは/ loginになりますが、タイトルは「ホーム」にリセットされます。
戻るボタンにも同じ問題があります。ユーザーはログインに戻ることができ、戻るとタイトルは「ホーム」ではなく「ログイン」のままになります
@Rolodecks 'contextTypes'が定義されていない場合、コンテキストは空のオブジェクトになります。' [react docs] [https://facebook.github.io/react/docs/context.html]から引用してください。これを修正するには、コンポーネントの 'contextTypes'を定義してください。 'router'はちょうどオブジェクトであることができます – xiaofan2406
@ xiafan2406、私は両方のルータのcontextTypesを次のように定義しました: ' MenuBar.contextTypes = { \tルータ:React.PropTypes.object。isRequired }; ' まだ問題があるようですが、これは正しいですか? 編集:Uncaught TypeError:未定義のプロパティ 'pathname'を読み取ることができません – Rolodecks
@Rolodecks、私の間違いは、 'react-router'(2.5.2)の最新の安定版では' this.context.location.pathname'にする必要があります。私は私の答えを修正しました – xiaofan2406