首页 > 解决方案 > 将新数组而不是数组文字传递给 useState 显示空数组

问题描述

这是一个小问题,但很奇怪!

let checkedlistarr = new Array();
for (var i in items){  //items size is 30
    checkedlistarr.push(i)
 }
const [selected, setSelected] = React.useState(checkedlistarr);
console.log(selected)

它返回[]

checkedlistarr = ["0","1","2","3"];
const [selected, setSelected] = React.useState(checkedlistarr);
console.log(selected)

它返回["0","1","2","3"]

为什么会发生这种情况?我也尝试过 concat 函数。但同样的问题。

标签: javascriptreactjs

解决方案


可能有一点小误会。我相信items必须为空或没有可迭代的属性。

从 docs for-in 开始,迭代所有可枚举的属性。

例如:如果items是一个数字/布尔值(having not Iterable values),for-in循环甚至不会执行。

const items = 30
for(var i in items) {
  console.log("this won't run") // Because `Object.getOwnPropertyDescriptors(items)` returns empty `{}`
}

如果 items 具有 Iterable 属性,则for..in循环正确执行。方法

const items = new Array(30).fill(1) // fill some values or any object with values { 0: 0, 1: 1, 2: 2... }
for(var i in items) {
  console.log("this will run", i) // Because `Object.getOwnPropertyDescriptors(items)` returns empty `{0, {...}, 1: {...},2...}`
}

您可以在此处使用您的代码查看演示。


推荐阅读