2016-08-25 25 views
0

質問にまっすぐに進みますが、私はreduxストアにフィルタリストがあります。フィルターが追加され、そこから削除されます。予期せぬredux .filterの結果

次のようにフィルタを追加:予想通り

case ADD_FILTER: 
     return { 
     ...state, 
     filters: [ 
      ...state.filters, 
      action.filter 
     ] 
     }; 

が働いています。フィルタを削除するとき:

case REMOVE_FILTER: 
     return { 
     ...state, 
     filters: state.filters.filter(
      filter => filter.type !== action.filter.type && filter.name !== action.filter.name 
     ) 
     }; 

私のリストからすべてのフィルタを削除します!ここ

はフィルタのサンプル表現です:

{ 
    { 
     type: 'sampleType1' 
     name: 'value1' 
    }, 
    { 
     type: 'sampleType2' 
     name: 'value1' 
    }, 
    { 
     type: 'sampleStatus1' 
     name: 'value2' 
    }, 
    { 
     type: 'sampleStatus2' 
     name: 'value3' 
    }, 
} 

とアクション:

export function addFilter(filter) { 
    return (dispatch) => { 
    dispatch({ 
     type: ADD_FILTER, 
     filter 
    }); 

    dispatch(load()); 
    }; 
} 

export function removeFilter(filter) { 
    console.log(filter); 
    return (dispatch) => { 
    dispatch({ 
     type: REMOVE_FILTER, 
     filter 
    }); 

    dispatch(load()); 
    }; 
} 

私は.filter()機能に問題がなければならないことを疑っています。

私はすべてを説明してくれることを願っています。

答えて

1

だけ指定したフィルタを削除したい場合は、あなたがまたは||オペレータ使用する必要があります。

filter => filter.type !== action.filter.type || filter.name !== action.filter.name 
+0

を私が正しいんだ場合、論理的にその作業が、思考が、これは「フィルターを言うだろうと思われますアクションのフィルタタイプと等しくないタイプ、またはアクションのフィルタ名と等しくないフィルタ名」を選択します。この引数に適合するすべてのフィルタが削除されます。 ここでは、フィルタオブジェクト(type = sampleType2、name = value1)を使用して、最初のフィルタオブジェクトをstore(type = sampleType1、name = value1)から削除します。 これは私が期待するものではありません。 –

+1

'filter.type!== action.filter.type'がtrueを返すので、(type = sampleType1、name = value1)のフィルタは削除されません。 – slugo

関連する問題