Javascript 将新数组而不是数组文本传递给useState将显示空数组
这是个小问题,但很奇怪强>Javascript 将新数组而不是数组文本传递给useState将显示空数组,javascript,reactjs,Javascript,Reactjs,这是个小问题,但很奇怪 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) 它返回[] 但是 它返回[“0”、“1”、“2”、“3”] 为什么会发生这种情况?我也尝试
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)
它返回[]
但是
它返回[“0”、“1”、“2”、“3”]
为什么会发生这种情况?我也尝试了concat函数。但同样的问题。我确信代码没有问题。 它返回空数组的原因是由于处理时间
console.log(selected);
这一行将在循环操作之前处理。可能会有一点误解。我认为
项
必须为空或没有可编辑属性
从文档开始,迭代所有可枚举属性
Ex:如果项
是一个数字/布尔值(具有不可编辑的值
),for in
循环甚至不会执行
const items=30
对于(项目中的var i){
console.log(“这不会运行”)//因为`Object.getOwnPropertyDescriptors(items)`返回空的`{}`
}
我认为您的console.log(选中)
是在for循环之前执行的。为什么不试试useffect
hook。什么是items
?如图所示,您的代码工作正常。请包含一个。我尝试了与预期相同的方法。它工作正常。您可以包含一个可复制的示例吗?我正在获取数组项的控制台,您可以通过控制台检查控制台中的i值。log(i)。因为所有看起来不错的.for-loop都是同步的-基于发布的代码OP,为什么您认为首先执行console.log
?
console.log(selected);