【发布时间】:2015-12-24 00:50:20
【问题描述】:
我正在尝试向state 中的数组添加一个元素并更改另一个数组元素的属性。假设我们有以下state 结构:
{
menuItems: [{
href: '/',
active: true
}]
}
在发送ADD_MENU_ITEM 操作后,我想以这个state 结束:
{
menuItems: [{
href: '/new',
active: true
}, {
href: '/',
active: false,
}]
}
我已经尝试在 Redux reducers 中以多种方式管理它:
function reducer(state = {}, action) {
switch (action.type) {
case ADD_MENU_ITEM: {
let menuItems = state.menuItems;
let newMenuItem = action.newMenuItem;
// First try
menuItems[0].active = false;
menuItems.unshift(newMenuItem);
state = Object.assign({}, state, { menuItems: menuItems });
// Second try
menuItems[0].active = false;
menuItems.unshift(newMenuItem);
state = Object.assign({}, state, {menuItems: Object.assign([], menuItems)});
// Third try
menuItems[0].active = false;
state = (Object.assign({}, state, {
menuItems: [
Object.assign({}, newMenuItem),
...menuItems
]
}));
// Fourth try
menuItems[0].active = false;
state = update(state, {
menuItems: {$unshift: new Array(newMenuItem)}
});
console.log(state);
return state;
}
}
}
在第四次尝试中,我使用了 React 的 Immutability Helpers,但它从来没有用过。我在返回状态之前将状态记录到控制台并正确记录,但是当登录到重新rendered 的组件内时,menuItems 数组不会添加第一项,尽管active 成员设置为@ 987654332@.
我做错了什么?
【问题讨论】: