私はreact、alt.js、およびreact-routerを使用しており、基本的なCRUDでアプリケーションを構築しています。 "Create Item"のメニュー項目があり、それはモーダル(反応ブートストラップを使用して...)を提出し、提出すると、バックエンドでいくつかのモデルを作成するアクションを起動し、browserHistory.push
を実行します反応ルータ文書)が完了すると、新しく作成されたアイテムのアイテムページに移動します。react、react-router、およびasyncデータ読み込み
基本的なケースでは、これは機能します。たとえば、私がメインのアプリケーションページにいる場合、それは動作します。しかし、別の商品の商品詳細ページに既に入っている場合は(/item/1
とし、/item/2
を作成したので、ページから/item/1
にリダイレクトしようとしています)。
fetchItem
用)
ItemViewPage
の
componentDidMount
は私がオンラインで見つけることができるすべての例に基づいて、かなり一般的なようだコンポーネントを、反応です。
ページが現在レンダリングされている場合は、コンポーネントがすでにマウントされているため(!)、componentDidMount
は呼び出されません。そして私のページURLは/item/2
に更新されますが、内容はまだ/item/1
です。
私の質問は....です。 componentDidMount
からデータロードを開始するのが間違っていますか?反応ルータが新しいIDを設定するので、私はそれを他のライフサイクルメソッド(例えば、componentWillReceiveProps
)とするつもりですか?それとも、私はどこからデータロードを撃退しなければならないか、他の場所があるのでしょうか?(例えば、反応ルータには、これを処理していることに気づいていない機能がありますか?
['ShouldComponentUpdate'](https://facebook.github.io/react/docs/component-specs.html#updating-shouldcomponentupdate)は私の推測ですが、コードを投稿した方が良いでしょう。 –
それは多分コードでしょう、おそらく!しかし、とにかく質問をタイプするだけで私は 'componentWillReceiveProps'を試しました。そして、' if(this.props.params.id!== newProps.params.id){this.props.fetchItem(newProps.params。 id); } '、これは動作するようです。それは私が推測する意味がありますが、それはボックスの外で動作しないことが驚いて私を捉えました。 – Kevin
あなたの 'params'を知らなくても、どのようにして「すぐに」動くでしょうか?とにかく、うまく働いてうれしいです。おそらく次回は、質問を投稿する前にもっと研究してください;) –