鉴于我最初的 redux 状态是:
const state = {
currentView: 'ROOMS_VIEW',
navbarLinks: List([
{name: 'Rooms', key: 'ROOMS_VIEW'},
{name: 'Dev', key: ''}
]),
roomListsSelected: {group: 0, item: 0},
roomLists: [
{
name: "Filters",
expanded: true,
listItems: [
{ icon: 'images/icon-warning.svg', name: 'Alerts', filter: room => room.hasAlert },
{ icon: 'images/icon-playlist.svg', name: 'In Progress', filter: room => room.progress > 20 },
{ icon: 'images/icon-playlist.svg', name: 'Almost Done', filter: room => room.progress > 90 },
{ icon: 'images/icon-playlist.svg', name: 'Complete', filter: room => room.status === 'complete' },
{ icon: 'images/icon-playlist.svg', name: 'Recently Completed', filter: room => false },
{ icon: 'images/icon-playlist.svg', name: 'All Rooms', filter: room => true }
]
}
],
rooms: List(generateRooms())
}
我需要制作一个执行此操作的减速器:
state.roomList[n].expanded = !state.roomList[n].expanded
我是使用 Redux 工作流的新手,解决此问题的最佳方法是将 roomList 设置为 immutable.js 对象或编写一些代码来对我的状态对象进行深度克隆。
state.roomList 也会从未来的功能中推送新数据。
总结/问题:在状态中进行这样的更改时,在减速器中返回新状态对象的最佳方法是什么,或者我应该更改 Redux 状态对象的结构?
我所做的最终 Immutable 似乎是要走的路。Immutable 有一些技巧可以减少react渲染时间,它满足所有项目要求。此外,在项目中使用新库而无需进行重大更改还为时过早。