this.state.something变异并导致问题

时间:2017-06-01 11:41:15

标签: javascript reactjs

出于某种原因,我无法做到这一点

this.state.something.map(obj => obj.id)

因为它引起了额外的重新渲染。如何从状态获取某些东西,而不将其分配给新变量?

我曾经做过这个丑陋的黑客

something_state_holder = this.state.something
something_state_holder.map(obj => obj.id)

但是有更好/更优雅的方式吗?

1 个答案:

答案 0 :(得分:1)

正如@ mayank-shukla所说,你在这里所做的是完全有效的。 map()方法遍历数组并返回和数组,但不会改变迭代的数组。这是MDN documentation所说的内容:

  

map() 方法创建一个新数组,其结果是在此数组中的每个元素上调用提供的函数。

     

map 不会改变调用它的数组(尽管回调,如果被调用,可能会这样做)。

但是,如果要在数组上创建浅表副本,可以使用slice:

something_state_holder = this.state.something.slice();
var resulting_array = something_state_holder.map(obj => obj.id);

这会遍历副本,而不是状态。你所做的不是创建一个数组,只是将对同一数组的引用赋给一个新变量。如此变异会改变国家。