javascript - Array.concat() 返回一个空数组

标签 javascript arrays reactjs concatenation

我正在使用 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 函数在单击按钮时被触发。当我第一次点击它时,控制台返回 [],但当我第二次点击它时,它返回扩展数组:[{...}]

奇怪的是,当我尝试在浏览器的控制台中做类似的事情时,它工作正常:

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 将具有新值。

关于javascript - Array.concat() 返回一个空数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58384428/

相关文章:

javascript - :hover produces errors. 我该如何解决这个问题?

c# - 将数组中的元素右移 n

java - Firebase - 将子项添加到数组列表 - java

javascript - 如何将动态列和行数据推送到antd表

reactjs - 为什么 setState(this.state) 没有触发重新渲染?

javascript - React JS 'this' 未按预期工作

javascript - 使用 CSS 和 HTML 的垂直树

javascript - 为什么 AngularJS 无法解决这种依赖关系

javascript - 隐藏窗口滚动条而不移动居中内容

java - 打印数组时出错