如何更新reducer中嵌套对象的值?

2023-12-22

我已经像这样建立了我的国家

const list = {
  categories: {
   Professional: {
    active: false,
    names: [
      {
        id: 1,
        name: "Golf",
        active: false
      },
      {
        id: 2,
        name: "Ultimate Frisbee",
        active: false
      }
  ] 
}}

在我的操作中,我添加了一个 ID 选项,因此我想在用户单击该选项时更改活动状态

我正在使用 Immutable JS,尽管没有与它结婚。我想知道如何定位对象的 id 并在减速器中更新其活动状态?我也愿意接受有关如何更好地改善我的状态的反馈


这是很常见的事情,而且实际上非常令人畏惧。据我所知,纯 JS 中还没有真正好的、被广泛采用的解决方案。最初,Object.assign使用的方法:

return Object.assign({}, state, {
  categories: Object.assign({}, state.categories, {
    Professional: Object.assign({}, state.Professional, {
      active: true
    })
  })
});

我承认,这太简单和麻烦了,但我不得不说,我们用这种方法构建了一些大型应用程序,除了字符数量之外,它还不错。如今,最流行的方法是使用对象传播 https://babeljs.io/docs/plugins/transform-object-rest-spread/:

return {
  ...state,
  categories: {
    ...state.categories,
    Professional: {
      ...state.categories.Professional,
      active: true
    }
  }
}

第二种方法更加简洁,因此如果您使用纯 JS,那么它似乎是一个不错的选择。 在 Immutable.js 中,我不得不承认它更容易,你只需执行下一步

return state.updateIn(['categories', 'Professional'], x => x.set('active', true));

但它有其自身的缺点和注意事项,因此最好在做出决定之前认真考虑一下。

关于改善状态的最后一个问题 - 通常最好不要有如此深的嵌套(分开你的关注点,很多时候字段并不相互依赖 - 就像active状态可以分离到另一个对象),但由于不了解您的领域,所以很难说。而且,这被认为是正常的事情正常化 http://redux.js.org/docs/recipes/reducers/NormalizingStateShape.html您的数据。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何更新reducer中嵌套对象的值? 的相关文章

  • 如何对这个 Redux thunk 进行单元测试?

    所以我有这个 Redux 动作创建器正在使用redux thunk中间件 accountDetailsActions js export function updateProduct product return dispatch getS
  • Redux 不就是美化了全局状态吗?

    所以我一周前开始学习 React 我不可避免地遇到了状态问题以及组件应该如何与应用程序的其余部分进行通信 我四处搜寻了一下 Redux 似乎是这个月的热门 我通读了所有文档 我认为这实际上是一个相当革命性的想法 以下是我的想法 人们普遍认为
  • 将属性映射到react-redux中的状态

    我有一个使用的组件state向用户提供数据 例如 div this state variableInState div 该组件可以调度一些方法 例如onClick行动 我目前正在使用react redux an connect映射方法sto
  • 如何在react redux中实现一个自包含组件?

    我正在基于react redux构建一个文件管理器webui 我的目的是通过这个项目掌握react和redux 如您所知 文件管理器需要一个树浏览器 我想构建一个可以包含它自己并且每个都有自己状态的组件 像下面这样 TreeNode可以包含
  • 在 socket.on() 的回调上调度操作

    所以基本上我得到了这个套接字 它工作正常 向我发送 新订单 消息 我正在使用 redux 并且我想分派一个操作 然后减速器会得到它并且我的商店将会更新 但这段代码没有做任何事情 socket on new order order gt re
  • 为什么express服务器接收到的前端数据是未定义的?

    我目前正在开发社交媒体 Mern Stack React 应用程序 我使用 Node js 和 Express 作为我的后端服务 还使用 mongoose 来存储我的数据 并使用 axios 和 redux thunk 将后端连接到前端 到
  • 如何在 redux-toolkit 中正确使用 PayloadAction 和元类型?

    简化示例 import createSlice PayloadAction from reduxjs toolkit type Cake flavor string size S M L const initialState all Cak
  • 如何在redux中设置初始状态

    我试图弄清楚如何在 redux 中设置商店的初始状态 我在用着https github com reactjs redux blob master examples todos with undo reducers index js htt
  • 我的 rtk 切片的初始状态未按预期保存在存储中?

    目前正在学习如何将 RTK 与 typescript 结合使用 我有 2 个切片 其中一个是我使用 RTK 查询制作的以获取数据 称为apiSlice ts 另一个使用 createSlice 来处理我的待办事项应用程序的同步状态更改 称为
  • 监听 redux 动作

    我想创建一个可重用的 redux 表模块 它将存储和更新页码 显示的总页数等 我可以在所有页面之间共享这些模块 但是 我需要更新操作来触发刷新数据操作 该操作将根据页面到达不同的端点 因此 可能类似于页面特定的监听 RefreshData
  • 向 ReduxReducer 添加回调

    是否有任何错误 反模式 就 React Redux 中的思考 中添加了一个回调action data转化为行动 reducer ACTION FOR REDUCER var x 123 if action data callback act
  • 以编程方式更改 Redux-Form 字段值

    当我使用redux formv7 我发现没有办法设置字段值 现在在我的form 我有两个select成分 当第一个时 第二个的值就会很清楚select元件值改变 在类渲染中 div div site div div div div
  • Redux 状态在 mapStateToProps 中未定义

    我目前正在关注this http teropa info blog 2015 09 10 full stack redux tutorial html教程 我遇到了一些障碍mapStateToProps在下面的代码中 import Reac
  • React Native + Redux 基本身份验证

    我正在寻找一种为我的反应本机应用程序创建基本身份验证的方法 我找不到任何反应本机应用程序的好例子 要登录 应用程序将电子邮件 密码 clientSecret 发送到我的服务器 如果OK 服务器返回accessToken refreshTok
  • 使用react redux获取删除请求方法不删除

    我正在尝试使用 fetch 删除请求方法来使用 React redux 删除本地主机服务器中的项目 调用方法 deleteItem e e preventDefault const id this props id this props d
  • 如何通过 redux-persist 阻止 redux-form“form” 状态自动重新水合

    我正在使用 redux form 它提供了一个内置的减速器 称为 formReducer 需要向组合减速器注册 以使用 redux 的存储管理表单状态 我还使用 redux persist 来保存 redux 存储 当我不想让我的表单自动重
  • redux - 如何存储和更新键/值对

    我正在使用 redux 和 React js 我想存储简单的键 值对 但无法获得正确的减速器语法 在这种情况下 每个键 值对将保持与外部系统的连接 这是正确的做法吗 我刚开始使用 redux 所以这有点神秘 export default s
  • Redux 状态在窗口重新加载时重置(客户端)

    我有非常大且复杂的对象 例如 userInfo chatInfo 等 就像具有非常大且嵌套信息的对象和数组一样 每次刷新页面时 我的 React 应用程序都会重置 redux 状态 我必须再次调用所有这些 API 我对这个主题做了一些研究
  • 理解react-hooks/exhaustive-deps useEffect和调度事件

    我有这个警告 React Hook useEffect has a missing dependency dispatch Either include it or remove the dependency array react hoo
  • 可能未处理的 Promise 拒绝/错误:请求失败,状态代码 400

    我知道对此有一些答案 并且我全部阅读了它们 但他们都没有帮助 所以这是我的错误消息 这是我的行动 export function registerUser data const request axios method POST url R

随机推荐

  • Java:从控制台读取直到出现空行

    我写了这个方法 永无休止 它没有打印我传递的内容 为什么 import java io BufferedReader import java io InputStreamReader import java util ArrayList c
  • java.util.Properties 编码

    我在两个不同的系统上得到不同的结果 但不知道为什么 Properties prop new Properties prop load new ByteArrayInputStream input input is byte 在两个系统上输入
  • 使用 Jackson 反序列化 Scala 列表

    我有一个返回的案例类看起来像这样 case class Response JsonDeserialize contentAs classOf java lang Long longList List Long null 我有一个客户 Obj
  • 使用 ODP.NET 从 PL/SQL 函数获取 RECORD,无需接触 PL/SQL 代码

    标题非常不言自明 从 C 应用程序 使用 ODP NET 我尝试调用一个 PL SQL 函数 该函数返回的不是一个简单的值 而是一条记录 不幸的是 我无权添加或更改 PL SQL 代码 因此尝试将函数包装在另一个返回不同类型的函数中对我来说
  • 十进制浮点数与二进制的相互转换

    简而言之 我的问题是 为什么浮点数中的舍入误差仅在计算后出现 而不是在存储文字时出现 我的意思是这样的 我知道在十进制与二进制相互转换时由于浮点数的舍入误差而出现的问题 例如 在 Java 中 double a 10 567 double
  • 相当于 C# 中 string.Format 的 CLR 函数

    我正在寻找一个 CLR 函数 它可以执行与 C 中的 String Format 相同的操作 作为示例 我想通过 CLR 函数执行以下操作 String Format My name is 0 and I live in 1 myName
  • 如何防止 org-mode 执行所有 babel 源代码块?

    我有一个 org 文件 里面有很多 babel 源代码块 只需要在代码更改时重新执行 如何防止 org 在导出期间执行所有块 换句话说 将它们全部设置为仅手动执行 我更喜欢单个全局选项 而不必单独编辑每个块 变量org export bab
  • C++ 异常二进制兼容性

    我的项目使用 2 个不同的 C 编译器 g 和 nvcc cuda 编译器 我注意到 g 对象文件中没有捕获从 nvcc 对象文件抛出的异常 C 异常应该在同一台机器上二进制兼容吗 什么会导致这种行为 try kernel new cuda
  • SQL 更新后,wso2 数据服务能否返回受影响的行?

    我已经使用 WSO2 数据服务连接到数据库一段时间了 一切都很完美 只是在 SQL 更新脚本之后我仍然无法获取受影响的行 我已经按照向导一遍又一遍地尝试 但没有找到解决方案 有谁知道如何获得吗 感谢您的提前回复 恐怕没有办法直接获取更新的行
  • makefile 的错误检查行为

    如果我的程序必须为不同的结果 主要是错误 返回不同的值 例如 0 1 2 3 等 则调用该程序的 makefile 将必须停止执行其余的 makefile 命令 即使该命令产生错误 返回非零值 是否有办法继续执行 makefile 谢谢你们
  • 当文件没有 .py 扩展名时为 python 运行 Flymake

    我根本不是一个 lisp 人 但我的主要脚本环境位于 emacs 上 当文件上没有 py 扩展名时 我需要一些帮助来运行我的 Flymake pyflakes 因为我工作中的一些脚本没有 py 扩展名 当我读取 编码扩展名为 py 的文件时
  • 为什么 Firefox 对输入元素使用 IE 框模型?

    尝试以下简单示例 div div div
  • TS-Jest 实用程序丢失

    Well using ts jest 27 x x I could access the utils helper by require ts jest utils and as you can see in the below pictu
  • 将 List 添加到 JSONArray

    我正在尝试使用 JSON 库创建 JSON 目前我正在创建 JSONArray 添加以将列表中的所有值添加到其中 但我面临这个问题 JSONArray 类型中的方法 put int boolean 不适用于参数 String List 在这
  • 在 ListBox 中记录用户可见的项目

    我有一个列表框或数据网格 其中包含数千个条目 我想知道用户查看过的项目 滚动 搜索或其他方式 我如何知道列表框中的用户可以看到什么 奖励 设置一个计时器 以便该项目必须显示至少 N 毫秒 如果用户只是拉下滚动条 Update 这几乎是重复的
  • 如何阻止应用程序在崩溃时重新启动并使崩溃可见?

    我正在开发一个应用程序并使用华为手机进行测试 每当发生崩溃时应用程序就会重新启动并且日志消失 开发人员选项中是否有任何设置或其他设置可以让崩溃对话框出现并显示崩溃日志 我最近了解到这一点 希望对其他人有帮助 像平常一样进行调试 但一旦发生崩
  • Internet Explorer:SCRIPT7002:XMLHttpRequest:网络错误 0x2f7d,由于错误 00002f7d,无法完成操作

    这个问题快把我逼疯了 我们的 Web 应用程序使用 HTTP POST 登录用户 现在 IE 10 正在中止连接并显示 SCRIPT7002 XMLHttpRequest Network Error 0x2f7d Could not com
  • openssl aes gcm 加密,带身份验证 TAG;命令行

    我正在尝试使用 openssl th 命令行以 AES GCM 模式加密文件 openssl enc aes 256 gcm p iv 000000000000000000000000 K 0000000000000000000000000
  • 为什么 jPlayer 无法在 Firefox 中播放我的 MP3 文件?

    我在 Firefox 8 中使用 jQuery Jplayer 播放 MP3 文件时遇到问题 我已经为我的浏览器安装了最新的 Flash 并且我可以看到 jplayer swf 文件正在 Firebug 的 Flash 选项卡中下载 我按此
  • 如何更新reducer中嵌套对象的值?

    我已经像这样建立了我的国家 const list categories Professional active false names id 1 name Golf active false id 2 name Ultimate Frisb