2016-07-09 4 views
3

投稿者:Reduxドキュメント:とsliceのメソッドを使用する必要がありますので、私は減速器(ほとんどの操作が単純化のために削除されました)を使用する必要があります。スライスとフィルタをreducexで削除するアクション

export default function blocks(state = [], action) { 
    switch (action.type) { 
     case DELETE_BLOCK: 
      var index = state.findIndex(e => e.id === action.blockId); 
      return [...state.slice(0, index), ...state.slice(index + 1)]; 
     default: 
      return state; 
} 
私は削除する要素のインデックスを持っていない私の場合は

ので、私はfilterを使用することができますか?このように:

export default function blocks(state = [], action) { 
    switch (action.type) { 
     case DELETE_BLOCK: 
      return state.filter(e => e.id !== action.blockId); 
     default: 
      return state; 
} 

答えて

6

filterが状態を変化させません、それは新しいArrayを返しますので、何も悪いことは、ここではありません。

immutableのデータを扱う際には常にを避けようとしています。これは常に新しい参照を返し、参照平等チェック===を破棄しているためです。しかし、あなたが州が変わっていないと思うなら、以前の州の参照を返そうと試みることによってこの種の参照を使用しないと(そしてあなたがこれをやっていないと思う、それは大丈夫です)、あなたは心配する必要はありませんfilterを使用しています。

0

還元剤は通常のJavaScript関数なので、テスト用のテストを書くのは非常に簡単です。あなたはそれにstateBeforeactionを与えて、それが期待されるstateAfterを返すかどうかをチェックするだけです。あなたはstateBeforedeep-freezeのようなものを呼び出すことができます。そして、あなたが誤って状態を突然変異させた場合、テストは失敗します。 Getting Started with Reduxビデオシリーズでは、この手法が示されています。

関連する問題