出于某种原因,我无法做到这一点
this.state.something.map(obj => obj.id)
因为它引起了额外的重新渲染。如何从状态获取某些东西,而不将其分配给新变量?
我曾经做过这个丑陋的黑客
something_state_holder = this.state.something
something_state_holder.map(obj => obj.id)
但是有更好/更优雅的方式吗?
答案 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);
这会遍历副本,而不是状态。你所做的不是创建一个数组,只是将对同一数组的引用赋给一个新变量。如此变异会改变国家。