2016-08-25 5 views
0

So direkt auf die Frage, ich habe eine Filterliste in meinem Redux-Shop, und es gibt Filter, die hinzugefügt und entfernt werden.Unerwarteter redux .filter Ergebnis

Zugabe Filter wie folgt:

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

arbeitet, wie erwartet. aber beim Entfernen eines Filters:

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

wird alle Filter aus meiner Liste entfernen!

hier ist eine beispielhafte Darstellung von Filtern:

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

und Aktionen:

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()); 
    }; 
} 

ich zu ahnen, dass es ein Problem mit .filter() Funktion sein muss, .

Ich hoffe, dass ich alles erklärt habe.

Antwort

1

Wenn Sie nur die Filter angegeben entfernen möchten, sollten Sie den oder || Betreiber werden:

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

Es scheint, dass seine Arbeit, aber logisch zu denken, wenn ich richtig bin, diese Filter“sagen Geben Sie nicht den Filtertyp "Aktion" oder "Filtername ist nicht gleich dem Filternamen von Aktion" ein. Dadurch wird jeder Filter entfernt, der zu diesem Argument passt. Jetzt habe ich ein Filterobjekt (type = sampleType2, name = value1) es wird auch das erste Filterobjekt aus dem Speicher entfernen (type = sampleType1, name = value1). Das ist nicht, was ich erwarte. –

+1

Der Filter mit (type = sampleType1, name = value1) wird nicht entfernt, weil 'filter.type! == action.filter.type 'den Wert true zurückgibt, wodurch die gesamte Aussage wahr wird und das Element im Array verbleibt. – slugo