当前位置: 首页 > 面试题库 >

使用不变性助手在React状态下更新数组对象

徐智渊
2023-03-14
问题内容

我正在使用不变性助手在React状态下更新数组中的对象。

我要修改的对象是嵌套的:

this.state = {
  a: {
    b: [{ c: '', d: ''}, ...]
  }
}

我想使用不变性助手来更新b的第n个元素内的prop c。

没有不变性帮助器的等效代码是:

const newState = Object.assign({}, this.state);
newState.a = Object.assign({}, newState.a);
newState.a.b = newState.a.b.slice();
newState.a.b[n] = Object.assign({}, newState.a.b[n]);
newState.a.b[n].c = 'new value';
this.setState({ newState });

我知道上面的代码有点难看。我假设使用不变性助手的代码可以解决我的问题。谢谢


问题答案:

一种方法是使用 $set

let index = 0;
let newState = update(this.state, {
   a: {
     b: {
      [index]: {
               c: { $set: "new value"}
       }
    }
  }
});
this.setState(newState);

jsfiddle



 类似资料:
  • 问题内容: 在reducer内部,给定一个状态对象: 如您所见,数据是一个嵌套数组,每个元素中都有一个数组。 知道action.indexToUpdate将是数据索引,我想以编程方式将data [action.indexToUpdate] .subset更新为新数组。例如,如果action.indexToUpdate = 0,那么data [0]将从 至 为此,我有: 但是当我执行此操作时,它返回

  • 在reducer内部,给定一个状态对象: 在更新喷泉上。 我一直在查看这里的react ducomentation:https://facebook.github.io/react/docs/update.html,但我真的不知道如何做到这一点。请指教!

  • 所以我有这个: 只是一个数组的数字例如然而没有给出正确的总数,但?我甚至放了一个超时延迟,看看这是否解决了问题。任何明显的还是我应该发布更多的代码?

  • 问题内容: 我正在尝试仅更新数组状态中的一个元素,但不确定如何执行此操作。 State 设定状态 如果我想更改标记的第四个元素中的键,该怎么做? 谢谢 问题答案: 重要的一点是,我们不应该直接更改状态数组,而要始终在新数组中进行更改,然后使用setState更新状态值。 如 Doc 建议: 切勿直接更改this.state,将this.state视为不可变。 更新状态数组的基本流程是: 1- 首先

  • 我正在尝试学习React(使用redux),所以我正在制作一个应用程序,在其中我可以创建训练计划,将训练添加到计划中,然后将训练添加到训练中。 PlanListComponent 我的PlansList组件为每个计划呈现一张卡片。在这张卡片中,它为该计划中的每个训练呈现一个训练列表。将训练添加到计划后,“计划列表”组件不会重新渲染。添加的训练仅在我刷新页面后显示。我之所以选择这种情况,是因为我必须

  • 它几乎添加了一个对象,该对象包含来自主窗体的子窗体的值。 这是我用作按钮的函数的函数。 这将一个新对象添加到一个名为的状态,该状态是一个对象数组。 提前谢了。