[英]Array.concat() returns an empty array
我正在使用 React 16.10 创建 web 应用程序,当我尝试使用Array.concat()
将元素添加到空数组时,首先它返回一个空数组,第二次尝试后它返回扩展数组。
我不使用Array.push()
的原因:
这是代码:
const [pizzas, setPizzas]= useState([]);
const addPizza = (type, size, dough, price) => {
setPizzas(pizzas.concat([{type, size, dough, price}]));
console.log(pizzas);
}
单击按钮时会触发addPizza
function。 当我第一次单击它时,控制台返回[]
,但是当我第二次单击它时,它返回扩展数组: [{...}]
。
奇怪的是,当我尝试在浏览器的控制台中做类似的事情时,它可以正常工作:
const a = [];
a.concat({name: 'James'}); // returns [{name: 'James'}]
.concat()
不修改Array
; 它返回一个包含串联的新数组。 因此,此行确实将下一次渲染中的比萨饼state设置为具有新项目的数组:
setPizzas(pizzas.concat([{type, size, dough, price}]));
...因为它有点转化为:
const newPizzas = pizzas.concat([{type, size, dough, price}]);
setPizzas(newPizzas);
...但是您正在记录的本地pizzas
变量未修改。 但是,下次调用useState
时, pizzas
将具有新值。
在 React 中设置 state 是异步的。 当您调用从useState
获得的 setter 时,您得到的保证是将来function 将使用新更新的 state 调用。
它不会更新现有的引用(对pizzas
) - 而是用新的引用调用 function。
这就是 state 在反应中的工作方式 - 大概是为了在渲染中创建一个不变的假装。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.