【发布时间】:2016-10-25 02:36:04
【问题描述】:
鉴于我最初的 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 有一些技巧可以减少反应渲染时间,并且满足所有项目要求。此外,在项目中使用新库而无需进行重大更改也足够早。
【问题讨论】:
-
您有问题吗?
-
在状态深处进行这样的更改时,在 reducer 中返回新状态对象的最佳方法是什么,或者我应该更改 Redux 状态对象的结构?
标签: reactjs redux immutable.js