私は反応してルータを反応するのはかなり新しいです。
Reactの問題は、私のアプリケーションのいくつかのページでreact-routerが機能していて、「undefinedのプロパティ 'Push'を読み取れません」というエラーが発生することです。
反応0.14.1を使用しています
私のルーティングコードは次のようになります。
render(
<Router history={hashHistory}>
<Route path="/" component={Loginpanel}/>
<Route path="Index" component={Index}/>
<Route path="Form" component={Form} />
<Route path="Checkindex" component={Index}/>
<Route path="Signup" component={Signup}/>
<Route path="Admin" component={Admin}/>
<Route path="AdminEditDetails" component={AdminEditDetails}/>
<Route path="AdminDetails" component={AdminDetails}/>
</Router>,
document.getElementById('js-main'));
私のコンポーネントは今のようです:
class App extends React.Component {
constructor(props) {
super(props);
this.state= {
comments: AppStore.getAll();
};
}
componentWillMount() {
var length = this.state.comments.length;
var firstnumber = length - 4;
if(length == 0){
console.log("here comes");
this.props.router.Push('/');
}
else{
console.log('work normally');
}
}
}
誰かがこれを手伝ってくれる?ありがとう。
アプリの小道具には、_Cannot read property 'Push' of undefined
_を与えるルーターのインスタンスがありません。
WithRouterをインポートしてルーターのインスタンスを取得することを想定しているので、それを使用したい場合はコンポーネントをラップする必要があります...(例 here が推奨されていません)
代わりに、プログラムでナビゲートするためのより良いアプローチは、
componentWillMount
ライフサイクルイベントのimport { hashHistory } from 'react-router;' ... hashHistory.Push('/');
。
ドキュメントは here です
お役に立てれば!
_react-router
_から直接hashHistory
を使用することは確かにオプションですが、ユニットテストを少し面倒にします。ブラウザ履歴は通常、実行されるコンテキストテストでは利用できません。グローバルAPIをモックアウトするよりも、プロップをモックアウトする方が簡単です。
_react-router
_が提供するwithRouter
高次コンポーネントの使用を検討してください(_v2.4.0
_以降)。
_import { withRouter } from 'react-router';
class App extends Component {
(...)
}
export default withRouter(App);
_
App
クラスは、propsを介してrouter
を受け取り、this.props.router.Push('/');
を安全に実行できます。
部分コンポーネントを使用していて、<Header />
のように呼び出す場合は、<Header {...this.props} />
に置き換える必要があります。
HashHistoryを使用しています。次のコードは動作するはずです。
import { hashHistory } from 'react-router';
hashHistory.Push('/');
ルートルートも定義する必要があります。
<Route path="/" component={App}>
以下のコードを試して、router props
が機能しているかどうか
componentWillMount() {
var length = this.state.comments.length;
var firstnumber = length - 4;
if(length == 0){
console.log("here comes");
if(this.props.router !== undefined) {
this.props.router.Push('/');
} else {
console.log(this.props.router);
}
}
else{
console.log('work normally');
}
}
また、以下のURLから詳細情報を取得するために、それらのドキュメントにアクセスできます https://github.com/reactjs/react-router/blob/master/docs/guides/NavigatingOutsideOfComponents.md