javascript - 更新 Redux/React 中 value = x 的状态

标签 javascript reactjs redux lodash normalizr

我的商店中有一组用户,设置如下:

{users: {user_id: 1, user_name: Adam, user_score: 100}, 
{user_id: 2, user_name: Bob, user_score: 200}, 
{user_id: 3, user_name: Charlie, user_score: 300}}

我的项目正在从设置如下的服务器接收 JSON 数据:

{user_id: 1, score: 10}

我想找到传递数据的 user_id 与现有用户集的 user_id 相匹配的位置,并将分数更新为之前的 score通过了。

例如,如果reducer收到{user_id:2, Score:10},我该如何将score更改为10,其中原始状态下用户 ID 等于2。当然,同时避免突变!

执行此操作的最佳方法是什么?标准化?洛达什?更新()? 看起来很简单,我一定在这里遗漏了一些明显的东西。 谢谢。

最佳答案

我建议使用immutable.js来实现此目的。

将要更新的用户的 id 传递给 action,然后将其传递给 reducer 并使用 不可变来更新用户数据。

所以你的不可变代码会是这样的

  const data = Immutable.fromJS(state)
  const newState = data.setIn(['users', user_id, 'score'], 10);
  return newState.toJS()

P.S:我还没有测试过上面的内容,但它应该可以工作(如果不修改一点)

您可以阅读有关不可变的内容 here .

此外,我建议查看类似的答案 here

关于javascript - 更新 Redux/React 中 value = x 的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41355822/

相关文章:

reactjs - 检查是否在设备React Native EXPO上禁用了声音

recursion - 在 FlowJS 中递归创建只读对象

javascript - shouldComponentUpdate() Prop 不同于 render() Prop

javascript - 如何识别调用 Javascript 函数的第 3 方 Flash 对象?

javascript - 页面加载后更改线索提示内容

javascript - Meteor、Ember.js 和 Backbone.js 之间的主要区别是什么?

reactjs - React-Bootstrap-Typeahead:清除菜单选择

reactjs - setState(...) : Can only update a mounted or mounting component. 这通常意味着您在未安装的组件上调用了 setState()。这是一个无操作

javascript - 如何在特定浏览器宽度下将一行div平均拆分为两行

reactjs - Redux TS 通用类型 'Dispatch<S>' 需要 1 个类型参数