使用拼接来更新 React 中的状态



我正在学习 React,在其中一个答案中,我看到在从数组中删除项目时使用拼接方法。 链接到解决方案: 从 react 中的状态数组中删除项目

要从数组中删除元素,只需执行以下操作:

array.splice(index, 1); 在您的情况下:

removePeople(e) {
var array = [...this.state.people]; // make a separate copy of the array
var index = array.indexOf(e.target.value)
if (index !== -1) {
array.splice(index, 1);
this.setState({people: array});
}
},

预期:与许多其他博客一样,我们使用过滤器方法从列表中删除项目。 为什么答案被点赞,而我们在这里没有使用过滤方法?

没有规则,例如将此方法用于该方法和将该方法用于此方法。但是,要确保 React 知道状态的变化,需要满足两个条件。

  1. 使用setState更新状态
  2. 状态对象中的顶级键需要使用新值或引用进行设置。 即在浅层比较中显得不同。

您链接的已接受答案同时满足这两个要求。关键行是,

var array = [...this.state.people]    // make a separate copy of the array

请注意注释。原始海报已经明确表示,他正在使用 spread 语法创建对数组的新引用。他稍后执行的拼接操作是在这个新数组上,他稍后执行什么操作并不重要,当新数组设置为状态的一部分时,React 将至少调用一次 render 方法。

为什么要过滤?

Filter 按谓词筛选数组,并返回包含结果的新数组对象。在某些情况下,这可能更灵活、更方便使用,但它具有完全不同的行为。拼接允许通过索引精确删除连续的元素块,而过滤器则删除所有与谓词不匹配的元素。

使用哪个的决定取决于您最适合用例的内容。只要满足上述条件,React 就会重新渲染。

注意:在所呈现的情况下,filter将是性能选择,因为它只遍历数组一次。拼接操作需要、扩展和indexOf,这会导致数组上的多个枚举。

最新更新