首页 文章

更新redux状态数组中的对象不重新渲染反应组件[重复]

提问于
浏览
0

这个问题在这里已有答案:

我想在我的redux状态下更新chefs数组中的一位厨师 . 该数组的一个例子如下:

[
    { _id: 1, name: 'first chef' },
    { _id: 2, name: 'second chef' },
    { _id: 2, name: 'third chef' }
  ]

我调用了API,然后返回更新的chef对象 . 我基本上在当前状态下找到相关的厨师对象,但是,当我不可更新地更新它时,我的反应组件不会重新渲染 .

这是更新redux reducer中对象数组中单个对象的正确方法吗?

import _ from 'lodash';
import { ADMIN_LIST_CHEFS, ADMIN_GET_CHEF, UPDATE_CHEF_LIST } from '../actions/types';

const INITIAL_STATE = { chefs: [], chef: null };
let CHEFS = [];
let INDEX = null;

export default function (state = INITIAL_STATE, action) {
  switch (action.type) {
    case UPDATE_CHEF_LIST:
      CHEFS = state.chefs;
      INDEX = _.findIndex(CHEFS, (chef => chef._id === action.id));
      state.chefs.splice(INDEX, 1, action.payload);
      return { ...state };
    default:
      break;
  }
  return state;
}

1 回答

  • 5

    您应该从reducer返回新对象,并且可以使用map函数改进代码

    export default function (state = INITIAL_STATE, action) {
      switch (action.type) {
        case UPDATE_CHEF_LIST:
          return {
            ...state,
            chefs: state.chefs.map( chef => chef._id === action.id? action.payload: chef)
          }
        default:
          break;
      }
      return state;
    }
    

相关问题