Delete an item from Redux state

后端 未结 5 1645
庸人自扰
庸人自扰 2021-01-30 17:44

I\'m wondering if you could help me with this problem if possible. I am trying to delete an item from the Redux state. I have passed in the ID of the item that the user clicks v

相关标签:
5条回答
  • 2021-01-30 18:19

    In my case filter worked without () and {} and the state was updated

    case 'DELETE_COMMENT':
        return state.filter( id  => id !== action.data);
    
    0 讨论(0)
  • 2021-01-30 18:30

    Just filter the comments:

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

    This way you won't mutate the original state array, but return a new array without the element, which had the id commentId.

    To be more concise:

    case 'DELETE_COMMENT':
      return state.filter(({ id }) => id !== action.data);
    
    0 讨论(0)
  • 2021-01-30 18:41

    You can use Try this approach.

    case "REMOVE_ITEM": 
      return {
      ...state,
        comment: [state.comments.filter(comment => comment.id !== action.id)]
      }
    
    0 讨论(0)
  • 2021-01-30 18:42

    You can use Object.assign(target, ...sources) and spread all the items that don't match the action id

    case "REMOVE_ITEM": {
      return Object.assign({}, state, {
        items: [...state.items.filter(item => item.id !== action.id)],
      });
    }
    
    0 讨论(0)
  • 2021-01-30 18:42

    For anyone with a state set as an Object instead of an Array:

    I used reduce() instead of filter() to show another implementation. But ofc, it's up to you how you choose to implement it.

    /*
    //Implementation of the actions used:
    
    export const addArticle = payload => {
        return { type: ADD_ARTICLE, payload };
    };
    export const deleteArticle = id => {
         return { type: DELETE_ARTICLE, id}
    */
    
    export const commentList = (state, action) => {
      switch (action.type) {
        case ADD_ARTICLE:
            return {
                ...state,
                articles: [...state.articles, action.payload]
            };
        case DELETE_ARTICLE: 
            return {
                ...state,
                articles: state.articles.reduce((accum, curr) => {
                    if (curr.id !== action.id) {
                        return {...accum, curr};
                    } 
                    return accum;
                }, {}), 
            }
    
    0 讨论(0)
提交回复
热议问题