2017-09-23 14 views
2

私は反応経路を使用しているReact + ReduxでSPAを作成します。 /about、/ contact、/ listなどのルートを切り替えるたびに、コンポーネントがアンマウントするたびにという1つの問題に直面しています。経路の変更時にルータコンポーネントがアンマウントする

これは予想された動作であるか、私は間違っていることを知る必要があります。いくつかのコンポーネントでは、データを取得するためにajax呼び出しを行います。コンポーネントがアンマウントされ、ユーザーが再び戻ってくると...データが既にストアで利用可能な場合でも、再びajaxコールを行います。

<Route path="/" component={App}> 
    <IndexRoute component={HomePage} /> 
    <Route path="about" component={About} /> 
    <Route path="/" component={HomePage} /> 
</Route> 
+1

"これは期待された動作です"。はい。ルートを変更すると、現在のルートコンポーネントがアンマウントされ、新しいルートコンポーネントがマウントされます。 –

+0

これを停止する方法はありますか?実際には毎回コンポーネントをアンマウントする必要はありません。不必要なアヤックスヒットのために。 コンポーネントの取り外しを中止するこの正しい方法もありますか? –

答えて

0

古いコンポーネントが削除されたルートに移動するたびに、新しいコンポーネントがロードされ、(の接続再来と)店舗の値が移入されます。

データは常にストアで使用できるため、コンポーネントがアンロードして再ロードするときに、新しいajaxリクエストを起動する必要はありません。

また、常にコンポーネントを使用できるようにするには、ナビゲーションメニューまたはタブを使用して単一のルートを使用し、メインコンポーネントからコンポーネントを表示および非表示にできます。ただし、コンポーネントの数に応じてDOMはかなり重くなることがあります。

+0

私はあなたが言ったことに完全に同意しますが、私の問題は、componentWillMountまたはcomponentDidMountからajaxを呼び出してコンポーネントからデータを取得することです。コンポーネントがアンマウントされ、再度マウントされると、ライフサイクルメソッドが起動します。 –

+0

これはcomponentDidMountに保持することができますが、loadAllアクションをディスパッチしない条件を追加することができます。そのコンポーネントが最初にマウントされたときにのみ読み込まれます –

関連する問題