2016-06-12 14 views
6

Zastanawiam się, czy mógłbyś mi pomóc z tym problemem, jeśli to możliwe. Próbuję usunąć element ze stanu Redux. Przekazałem identyfikator elementu, który użytkownik kliknie poprzez action.data do reduktora.Usunąć element z stanu Redux

Zastanawiam się, jak mogę dopasować action.data z jednym z ID w stanie Redux, a następnie usunąć ten obiekt z tablicy? Zastanawiam się również, jak najlepiej ustawić nowy stan po usunięciu pojedynczego obiektu?

Proszę patrz poniższy kod:

export const commentList = (state, action) => { 
    switch (action.type) { 
    case 'ADD_COMMENT': 
     let newComment = { comment: action.data, id: +new Date }; 
     return state.concat([newComment]); 
    case 'DELETE_COMMENT': 
     let commentId = action.data; 

    default: 
     return state || []; 
    } 
} 

Odpowiedz

41

Wystarczy filtrować komentarze:

case 'DELETE_COMMENT': 
    const commentId = action.data; 
    return state.filter(comment => comment.id !== commentId); 

W ten sposób nie będzie mutować oryginalny state tablicę, ale zwraca nową tablicę bez elementu, który miał identyfikator commentId.

Aby być bardziej zwięzły:

case 'DELETE_COMMENT': 
    return state.filter(({ id }) => id !== action.data); 
+0

Widziałem inny przykład, który używany tylko identyfikator, w przeciwieństwie do swojej odpowiedzi ({id}). co jest tutaj różne? –

+0

@MattSaunders '({id}) => ...' jest wyrażeniem lambda (funkcja strzałki w warunkach js), które niszczy jego argument. Oznacza to, że dane wejściowe powinny być obiektem, a my jesteśmy zainteresowani tylko jego właściwością "id". https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment –

Powiązane problemy