私はreact-router
とreact-redux
を使用しています。今Reactがコンポーネントをアンマウント/再マウントするのを防ぐにはどうしたらいいですか?
const EditNew = connect(state => ({}))(React.createClass({
render() {
return <Editor />;
}
}));
と
const EditDraft = connect(state => ({ drafts: state.drafts }))(React.createClass({
render() {
const { params, drafts } = this.props;
const draft = findDraft(params.id, drafts);
return <Editor draft={ draft } />;
}
}));
:EditNew
とEditDraft
がreact-redux
connect
関数を使用してEditor
成分を包む容器をデータ提供さ
<Route path='/edit' component={ EditNew } />
<Route path='/edit/:id' component={ EditDraft } />
:私はこのような二つの経路を有しています、Editor
は、ブランク入力を開始するとk Editor
を入力すると、history.replaceState()
が/edit
から/edit/:id
に生成され、IDが生成されます。これが起こるとき、私は、次の一連のイベントを取得:
EditorNew
アンマウントEditor
アンマウントEditorDraft
レンダリングしEditor
レンダリングし、私はこの二つをコード化すると
をマウントをマウントコンテナの両方に含まれているEditor
コンポーネントがアンマウントと再マウント。これは余分な不必要な作業以外にいくつかの理由から私にとって問題であり、その中の主なものはアンマウントと再マウント後にエディタがフォーカスを失い、適切なカーソル範囲を終了することです。リアクトどのような特定の理にかなって、私はそれは同じコンポーネントの和解システムへのヒントにするEditor
コンポーネントのkey
を指定して試してみましたが、私はshouldComponentUpdate
を試してみたが、それは呼び出されません無駄に
されますやって
さらに複雑なrender()
論理を持つ1つのコンテナに2つのコンテナを組み合わせる以外に、Editor
コンポーネントが履歴の移行中にアンマウント/再マウントされないようにするためにできることはありますか?
これは想定通りの動作をしているようですが、 'Editor'が子であるトップレベルのコンポーネントを変更しているので、新しい親の下で完全に破壊して再作成する必要があります。 – Mathletics
だから私はコンテナをマージする必要がありますか?私はhttps://github.com/rackt/redux-routerを見ていますが、私はすぐにRelayに移行したいと考えて、このプロジェクトにもっと多くのものを追加したくありません。 –
ええ、私はコンテナ1つにつきアドバイスをします。特に、同じものの異なる状態について話しているので、エディタを全く違う容量で使用しているわけではありません。 – Mathletics