我的商店中有一组用户,设置如下:
{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/