我正在嘗試向state
中的數組添加一個元素,並更改另一個數組元素的屬性。假設我們有以下state
結構:在Redux中更改狀態
{
menuItems: [{
href: '/',
active: true
}]
}
派遣ADD_MENU_ITEM
動作後,我想這state
落得:
{
menuItems: [{
href: '/new',
active: true
}, {
href: '/',
active: false,
}]
}
我曾嘗試在一些時尚的終極版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,但它永遠不會起作用。我在返回狀態並將其記錄正確之前將狀態記錄到了控制檯,但在記錄組件的內部記錄時,儘管active
成員設置爲false
,但menuItems數組不會添加第一個項目,儘管active
成員被設置爲。
我會做什麼錯?
鏈接到終極版異徑文檔改變:http://redux.js.org/docs/basics/Reducers.html – Anass