在Redux的Reducer中更新嵌套数组
我正在尝试更新reducer中的对象数组中的特定索引。该州有一系列对象。 isSearch是对象的属性。在行动的有效载荷中,我传递要更新的索引和值。这是我的代码:在Redux的Reducer中更新嵌套数组
case actions.UPDATE:
return {
...state,
arrObj: {
...state.arrObj,
arrObj[action.payload.index].isSearch : action.payload.isSearch,
},
};
我得到这个错误Unexpected token, expected , at arrObj[action.payload.index].
有人能告诉我如何纠正呢?
如果您正在寻找更新您的状态里的一个单值,试试这个:
case actions.UPDATE:
var newState = { ...state }
var arrayObj = newState.arrayObj = state.arrayObj.slice()
var element = arrayObj[action.payload.index] = { ...arrayObj[action.payload.index] }
element.isSearch = action.payload.isSearch
return newState
这似乎并没有工作,浏览器挂起。 – funkadelic
我修复了浏览器挂起问题。然而,该州似乎并没有改变。元素在返回新状态时不会被分配给任何东西。 – funkadelic
在'action.payload.index'中是否应该有一个对象?如果不是,我需要更改上面的代码。 – gyre
我猜immutability-helper
包从npm
将极大地帮助你在更新嵌套Redux的状态
import update from 'immutability-helper';
.......
case actions.UPDATE:
return update(state, {
arrObj: {
[action.payload.index]: {
isSearch: {
$set: action.payload.isSearch
}
}
}
})
那么,arrObj [action.payload.index] .isSearch:action.payload.isSearch应该是什么意思? – zerkms
@zerkms我分配arrObj [action.payload.index]对象属性isSearch – funkadelic