下面是一个示例的解决方法,演示了如何编写一个适用于数组中嵌套对象的 Redux reducer:
// 定义初始状态
const initialState = {
items: []
};
// 定义 reducer
const reducer = (state = initialState, action) => {
switch (action.type) {
case 'ADD_ITEM':
return {
...state,
items: [...state.items, action.payload]
};
case 'UPDATE_ITEM':
return {
...state,
items: state.items.map(item => {
if (item.id === action.payload.id) {
return {
...item,
...action.payload.data
};
}
return item;
})
};
case 'DELETE_ITEM':
return {
...state,
items: state.items.filter(item => item.id !== action.payload)
};
default:
return state;
}
};
// 创建 Redux store
const store = Redux.createStore(reducer);
// 示例动作
store.dispatch({
type: 'ADD_ITEM',
payload: { id: 1, name: 'Item 1' }
});
store.dispatch({
type: 'ADD_ITEM',
payload: { id: 2, name: 'Item 2' }
});
store.dispatch({
type: 'UPDATE_ITEM',
payload: { id: 1, data: { name: 'Updated Item 1' } }
});
store.dispatch({
type: 'DELETE_ITEM',
payload: 2
});
console.log(store.getState());
在这个示例中,我们定义了一个初始状态 initialState
,包含了一个 items
数组。然后我们定义了一个 reducer 函数,根据不同的动作类型来更新状态。在 ADD_ITEM
动作中,我们使用展开运算符 ...
来创建一个新的状态对象,并通过展开运算符 ...
和 push
方法来添加新的项到 items
数组中。在 UPDATE_ITEM
动作中,我们使用 map
方法来遍历 items
数组,并根据给定的 id
更新对应的项。在 DELETE_ITEM
动作中,我们使用 filter
方法来过滤掉指定 id
的项。最后,我们创建了一个 Redux store,并分发了一系列示例动作来演示 reducer 的行为。
希望这个示例能帮助你理解如何编写一个适用于数组中嵌套对象的 Redux reducer。