2017-12-13 10 views
0

私はReact-Reduxアプリケーションを持っており、更新機能を構築しています。私は状態のプロットのリストを持っていて、それらの一つを更新します。アップデートAPIコールが成功すると、更新されたプロットがレスポンスとして取得されます。古いプロットを状態の更新されたプロットに置き換えるにはどうすればよいですか?バックエンドからの戻りに基づいて配列内の1つの要素をRedux更新する

今、これは私のレデューサーです。更新されたプロットがログに記録されているのを見ていますが、リロードしない限り状態は置き換えられません。私はいつも成功のバックエンドからプロットリスト全体のリロードをトリガーすることができますが、不要な呼び出しを避けたいと思います。

case UPDATED_PLOT: 
      action.payload.id = action.payload._id; 
      console.log('updated plot received by reducer: ', action.payload); 
      return { 
       ...state, 
       filteredPlots: state.filteredPlots.map(
        plot => (plot.id == action.payload.id ? action.payload : plot) 
       ) 
      }; 

答えて

0

あなたの減速コードは、私には正常に見えます。あなたはredux州が更新されたと結論付けましたか? redux-dev-toolsのインストールを試みて、状態が更新されていないことを確認しましたか?

状態が更新されていることが確かであれば、コンポーネントが再レンダリングされているかどうかをチェックする価値があります。特定のコンポーネントでcomponentWillUpdate()を計測できます。また、react-reduxのドキュメント、特に "純粋な"オプションをチェックする価値があります。

+0

私はReact状態が更新されないと確信しています、React Dev Toolsでそれを見ているからです。 Redux Dev Toolsは私のためには機能しません(理解できません) –

+0

react開発ツールはあなたに還元状態を示していますか?私が作ろうとしているのは、あなたの還元状態が反応する方法に問題があるかもしれないということです。 – hedgepigdaniel

+0

React-devは特定のReactコンポーネントに渡される還元状態の部分を表示します。私はそこにフィルタリングされたプロットを見ることができます。なぜなら、コンポーネントはこの状態の部分をその小道具に写像するからです。彼らは変わらない。 –

0

これを試してみてください:

case UPDATED_PLOT: 
    action.payload.id = action.payload._id; 
    const new_filtered_plots = state.filteredPlots.map(plot => { 
     return plot.id == action.payload.id ? action.payload : plot 
    }); 
    return Object.assign({}, state, {filteredPlots: new_filtered_plots}); 
+0

試してみるとうまくいきません。これを普及させるよりもどのように優れていますか? –

関連する問題