由于某些原因,我无法执行此操作

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


因为它导致了额外的渲染。如何从状态中获取某些信息,而不将其分配给新变量?

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

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


但是有什么更好/更优雅的方法吗?

最佳答案

正如@ 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);


这会遍历副本,而不是状态。您所做的不是创建数组,您只是将对同一数组的引用分配给新变量。因此,变异会改变状态。

关于javascript - this.state.something发生变化并引起了问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44306550/

10-13 09:46