加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

reactjs – React-Redux复杂(深层)状态对象

发布时间:2020-12-15 20:54:51 所属栏目:百科 来源:网络整理
导读:鉴于我最初的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,listItem
鉴于我最初的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 },name: 'Almost Done',filter: room => room.progress > 90 },name: 'Complete',filter: room => room.status === 'complete' },name: 'Recently Completed',filter: room => false },name: 'All Rooms',filter: room => true }
      ]
    }
  ],rooms: List(generateRooms())
}

我需要制作一个减速器来做到这一点:

state.roomList[n].expanded = !state.roomList[n].expanded

我是使用Redux工作流程的新手,解决此问题的最佳方法是使roomList成为一个immutable.js对象,或编写一些代码来深入克隆我的状态对象。

state.roomList还将从未来的功能推送到新的数据。

总结/问题:在状态深处进行类似更改时,在reducer中返回新状态对象的最佳方法是什么,还是应该更改Redux状态对象的结构?

我做了什么最后,Immutable似乎要走了。有一些不可变的技巧可以减少反应渲染时间,并且满足所有项目要求。此外,在项目中尽早使用新库而不进行重大更改。

首先,惯用的Redux鼓励您“规范化”您的状态并尽可能地将其压平。使用按项目ID键入的对象允许直接查找项目,使用ID数组表示排序,以及一个项目需要引用另一个项目的任何地方,它只存储其他项目的ID而不是实际数据。这使您可以更简单地查找和嵌套对象的更新。见 the Redux FAQ question on nested data。

此外,您现在看起来正在直接在Redux状态下存储许多函数。从技术上说,这是有效的,但它绝对不是惯用的,并且会破坏时间旅行调试等功能,所以它非常气馁。 Redux FAQ提供了有关why storing non-serializable values in your Redux state is a bad idea的更多信息。

编辑:

作为后续行动,我最近在Red00文档中添加了一个关于“Structuring Reducers”主题的新部分。特别是,本节包括“Normalizing State Shape”和“Updating Normalized Data”以及“Immutable Update Patterns”的章节。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读