Javascript React中的数组长度为';t匹配到它拥有的元素数
每次单击我的卡组件时,它都在运行Javascript React中的数组长度为';t匹配到它拥有的元素数,javascript,arrays,reactjs,Javascript,Arrays,Reactjs,每次单击我的卡组件时,它都在运行cardSelected()函数。我可以看到选择的状态数组正在使用卡ID正确更新,但当我使用setState()检查数组长度时,它是一个 数组开始为空 单击第一张卡后,将使用卡id更新阵列 console.log(this.state.selected.length)当我希望它是1时,它的长度仍然显示为0,并且可以看到它在状态中有1值 cardSelected=id=>{ this.setState(prevState=>({ 已选择:[…prevState.s
cardSelected()
函数。我可以看到选择的状态数组正在使用卡ID正确更新,但当我使用setState()
检查数组长度时,它是一个
console.log(this.state.selected.length)
当我希望它是1
时,它的长度仍然显示为0
,并且可以看到它在状态中有1
值cardSelected=id=>{
this.setState(prevState=>({
已选择:[…prevState.selected,id]
}));
console.log(this.state.selected.length);
};代码>之所以会发生这种情况,是因为setState可能是异步的,我建议您阅读以下内容
在代码中,可以使用回调函数作为setState函数的第二个参数,该函数将在定义新状态时执行
cardSelected = id => {
this.setState(prevState => ({
selected: [...prevState.selected, id]
}), () => {
console.log(this.state.selected.length)
});
};
之所以会发生这种情况,是因为setState可能是异步的,我建议阅读本文
在代码中,可以使用回调函数作为setState函数的第二个参数,该函数将在定义新状态时执行
cardSelected = id => {
this.setState(prevState => ({
selected: [...prevState.selected, id]
}), () => {
console.log(this.state.selected.length)
});
};
这是因为setState
是异步的
为了工作,请使用状态更新后执行的回调进行如下修复:
this.setState(prevState => ({
selected: [...prevState.selected, id]
}),
() => console.log(this.state.selected.length))
这是因为setState
是异步的
为了工作,请使用状态更新后执行的回调进行如下修复:
this.setState(prevState => ({
selected: [...prevState.selected, id]
}),
() => console.log(this.state.selected.length))
正如一些同行回答的那样,setState是asnyc。并不是说人们建议的代码有什么问题。我认为你可以用下面的方法更好地写出你的逻辑
cardSelected = id => {
const selected = [...this.state.selected, id];
this.setState({ selected: selected });
};
您可以更好地使用调试状态值,而不是记录所有内容。如果您仍然觉得登录到console更好,那么您可以尝试登录render()方法或componentDidUpdate(),因为它们是检查数据的正确位置。正如一些同行回答的,setState是asnyc。并不是说人们建议的代码有什么问题。我认为你可以用下面的方法更好地写出你的逻辑
cardSelected = id => {
const selected = [...this.state.selected, id];
this.setState({ selected: selected });
};
您可以更好地使用调试状态值,而不是记录所有内容。如果您仍然觉得登录到控制台更好,那么可以尝试登录render()方法或componentdiddupdate()因为它们是检查数据的正确地点。官方文档明确描述了“状态更新可能是异步的”官方文档明确描述了“状态更新可能是异步的”