鉴于我最初的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设置为不可变.js对象或编写一些代码来深度克隆我的状态对象.
还声明.roomList将有来自future 功能的新数据.
Summery / Question:当在状态中进行如此深度的更改时,在reducer中返回新状态对象的最佳方式是什么,还是应该更改Redux状态对象的 struct ?
What I did最后,不变似乎是一条路要走.使用Immutable可以减少react渲染时间,并满足所有项目要求.此外,在项目中使用一个新的库而不进行重大更改也为时过早.