ページを表すReactコンポーネントがあります。ユーザーは、何らかの状態がない限り、ページにアクセスしないでください。リダイレクトコードはどこに置く必要がありますか?
warning.js:36警告:SETSTATE(...):
class BoxScreen extends Component { constructor(props) { super(props); if (Object.keys(this.props.boxState.current).length === 0) { browserHistory.push('/secured/find') }
は、私は、このメッセージが表示されます:私は状態が欠落している場合
react-router
ユーザーをリダイレクトを持って、次の書い更新できません。既存の状態遷移中(render
または他のコンポーネントのコンストラクタ内など)。レンダリング方法は、小道具と州の純粋な機能でなければなりません。コンストラクタの副作用はアンチパターンですが、componentWillMount
に移動することができます。
[OK]をので、私はcomponentWillMount
に私のリダイレクトコードを移動します:
class BoxScreen extends Component {
...
componentWillMount() {
if (Object.keys(this.props.boxState.current).length === 0) {
browserHistory.push('/secured/find')
}
}
render() {
// Don't want this executed or else I'll need to pollute it with null guards...
}
}
しかし、問題は、上記の間違い希望されていない、と呼ばれているからrender
を停止しないということです。これを置くための最も適切な場所はどこですか?私はコンポーネントレンダリングを短絡し、リダイレクトを実行できますか?
また、コンポーネントのコンストラクタからレンダリングへのフローを中断しないように、Lucasのアプローチを使用してコンポーネントのライフサイクルをまったく入力しなくてもよいし、一度入力すると中断しないでください。より良い方法は、コンポーネントをnullガードでレンダリングさせ、 'this.props'をチェックする' componentDidMount() 'の中で' this.history.push( '/ someGuardLink') 'を実行することです。 – smishr4