javascript - 将新数组而不是数组文字传递给 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 函数。但同样的问题。
解决方案
可能有一点小误会。我相信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...}`
}
您可以在此处使用您的代码查看演示。
推荐阅读
- java - 如何对具有字符串和整数组合数据(如 1094 天、1092 天、994 天、973 天)的列表执行排序操作
- node.js - NodeJS 如何从远程服务器读取大型 CSV/文本文件而不将其保存到磁盘?
- c - 通过递归反转字符串的单词
- javascript - 使用 jquery ajax 响应使选择的选项不起作用
- r - 如何使用库 SP 在 R 中创建网格,如 meuse.grid
- bash - 变量问题和使用 rsyslog 和 ansible 创建文件
- javascript - 如何在 JS 中检索以特定索引结尾的整个单词?
- angular - 如何在 ionic 4 中集成一个应该与网络和移动设备兼容的砑光机?
- javascript - 在 Google Apps 脚本中将带有图像的 PDF 转换为 Google Doc
- powershell - get-AzSqlDatabaseSensitivityRecommendation PowerShell 命令的限制