Reactjs 在reducer中更新数组中的值

Reactjs 在reducer中更新数组中的值,reactjs,redux,Reactjs,Redux,我有一个减速机 const initialState = { elements: [{"flag": false}, {"flag": false}] }; const checkReducer = function (state = initialState, action) { switch (action.type) { case CHANGE_CHECK: return {...state, //here I want upda

我有一个减速机

const initialState = {
    elements: [{"flag": false}, {"flag": false}]
};

const checkReducer = function (state = initialState, action) {
    switch (action.type) {
        case CHANGE_CHECK:

            return {...state, //here I want update element by index, that pass in action};
我需要更新数组元素中的现有值,该值是通过在操作中传递的索引获得的。 我可以这样做

state.elements[action.key] = {"flag": !action.flag}
...state, elements[action.index]: {"flag": !action.flag}] 
但我会改变现有的状态。根据redux原则,我不能这么做。 因此,我必须使用扩展运算符并更改新对象。但我不知道怎么用这种方式。 试过这样的东西吗

state.elements[action.key] = {"flag": !action.flag}
...state, elements[action.index]: {"flag": !action.flag}] 
但它不起作用。有没有办法做我想做的事

return {
  ...state,
  elements: state.elements.map((element, index) => {
    if (index === action.key) {
      return {"flag": !action.flag}
    }

    return element
  })
}
array#map
将创建一个新数组,并仅更改其索引与
action.key
匹配的项

如果您觉得这个过程很乏味,那么可以使用一些库,这些库允许在保持还原程序返回新状态的同时改变您的状态。其中之一是
immer

array#map
将创建一个新数组,并仅更改其索引与
action.key
匹配的项

如果您觉得这个过程很乏味,那么可以使用一些库,这些库允许在保持还原程序返回新状态的同时改变您的状态。其中之一是
immer