React SPAアプリがユーザーが戻る/進むブラウザボタンでナビゲートするときに状態を維持する方法を見つけようとしています。たとえば、ユーザーがフォームに入力してから、転送すると、フォームは自動的に復元されます。
私は多くのJavaScriptルーターをレビューしましたが、この問題に適切に対処しているものはないようです...(またはまったく)。
現在、React Router 4を使用しています。これは、私が採用しているパターンです。
history.replace(this.state)
;で現在のページの状態を保存します。 history.Push(newLocation)
を使用してページから移動しますcomponentWillMount
)_this.props.location.state !== undefined
_をチェックし、そうであれば、this.setState(this.props.location.state)
で復元します私の質問は、上記のパターンは正しいですか?提案?より良い、広く採用されている方法はありますか?
しばらくして、私は合理的な回避策を見つけました:
this.setState()
を使用するごとに、window.history.replaceState({ key: history.location.key, state: this.state})
を使用して状態を履歴と同期させますwillMount
およびwillReceiveProps
)_props.params.location.state
_の状態を確認します。1つある場合は復元します。ない場合は、新しい状態を作成します。this.setState
_と_window.history.pushState
_を使用しますこの解決策はうまく機能しているようで、マイナーな欠点は次のとおりです
this.setState
_は非同期であるため落とし穴です。後から_this.state
_を使用することはできません。Component
のconstructor()
に留まることはできません全体的に、すべての初期化/復元作業を行うPageComponent
を拡張するComponent
を作成しました。また、_this.setState
_をオーバーライドして、履歴と自動的に同期させ、非同期の煩わしさを回避します。