首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Redux reducers,对象键值

Redux reducers,对象键值
EN

Stack Overflow用户
提问于 2019-10-25 20:31:48
回答 3查看 646关注 0票数 0

我在我的redux商店中有hashMap,我想要更改孩子id: 2的isChecked值。像这样在state上运行是好的吗(在state上操作)?

我的hashMap

代码语言:javascript
复制
const childrens = {
  1: { name: "Test", isChecked: false },
  2: { name: "test2", isChecked: false }
};

这是我的减速器

代码语言:javascript
复制
export const childrensReducer = (state = childrens, action) => {
  switch (action.type) {
    case "SELECT_CHILDREN":
      const id = 2;
      state[id].isChecked = !state[id].isChecked;
      return { ...state };
  }
};
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-10-25 21:25:55

问题是,您正在使用下面的代码行改变reducer中的状态:

代码语言:javascript
复制
state[id].isChecked = !state[id].isChecked;

为什么redux需要不变性可以在官方文档中找到:

https://redux.js.org/faq/immutable-data

一种方法是:(我希望您通过action.id发送id )

代码语言:javascript
复制
    case "SELECT_CHILDREN":
      return {
        ...state,
        [action.id]: {
          ...state[action.id],
          isChecked: !state[action.id].isChecked
        }
      };

当数组用于状态时,这些类型的状态操作会更容易。

票数 1
EN

Stack Overflow用户

发布于 2019-10-25 21:25:17

像您这样改变状态并不是一个好的做法。

有不同的方法来改变状态。请查看下面的链接以获取更多信息和示例。https://www.freecodecamp.org/news/handling-state-in-react-four-immutable-approaches-to-consider-d1f5c00249d5/

票数 1
EN

Stack Overflow用户

发布于 2019-10-25 21:32:24

改变状态不是一个好的做法,因为react依赖于它的许多特性的不变性。

例如,考虑生命周期方法或比较状态/属性后的重新渲染(PureComponents)

变异状态的问题是,当这些值作为道具传递给子代时,您试图根据状态是否更新来对它们做出一些决定,以前的道具和当前的道具都将持有相同的值,因此比较可能会失败,从而导致应用程序出错

更新状态的正确方法是

代码语言:javascript
复制
case "SELECT_CHILDREN": 
  const id = 2;
  return {
    ...state,
    [id]: {
      ...state[id],
      isChecked: !state[id].isChecked
    }
  };
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58558615

复制
相关文章

相似问题

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