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