首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >更新Redux中嵌套状态的更简洁/更短的方法?

更新Redux中嵌套状态的更简洁/更短的方法?
EN

Stack Overflow用户
提问于 2016-02-24 02:20:34
回答 6查看 28.4K关注 0票数 33

有时减速机会变得很乱:

代码语言:javascript
复制
const initialState = {
    notificationBar: {
        open: false,
    },
};

export default function (state = initialState, action) {
  switch (action.type) {
    case actions.LAYOUT_NOTIFICATIONBAR_OPEN:
      return Object.assign({}, state, {
        // TODO: Find a cleaner way to do this!
        notificationBar: Object.assign({}, state.notificationBar, {
          open: true,
        }),
      });
    default:
      return state;
  }
}

有什么更简洁的方法吗?

EN

Stack Overflow用户

发布于 2017-06-04 14:48:03

这里的所有建议都是有效的,但我想提出另一种解决方案。这里出现的问题肯定是一个常见的模式,所以我认为最好是为这类更新编写自己的接口,并在减速器内部坚持使用它,并使用一个函数在所有减速器内部进行深入更新。

例如,我创建了一个图书馆,我下一次尝试解决这个问题:我得到模块的类型(所谓的“瓷砖”),函数来执行操作(包括异步和同步),以及基于传递的参数进行所需的嵌套。所以,就你的情况而言,会是这样的:

代码语言:javascript
复制
import { createSyncTile } from 'redux-tiles';
const uiTile = createSyncTile({
  type: ['ui', 'elements'],
  fn: ({ params }) => params,
  // type will be `notificationBar`
  nesting: ({ type }) => [type],
});

仅此而已--它将被正确地更新为任意嵌套。此外,瓷砖还提供了选择器,所以您不必亲自担心数据的确切位置,只需使用它们即可。所以,我不想说它是最好的解决方案,但是这个想法很简单--不要害怕编写自己的实现,然后使用工厂来解决这个问题。

票数 0
EN
查看全部 6 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35592078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档