Nat*_*nen 5 javascript reactjs react-hooks
我试图使用更新后的状态值作为参数从父函数调用处理程序,但是,在调用 setSelected 后状态不会立即更新,因为两个控制台日志都打印 false(初始值)。然而,onClick 函数完成后,它会被更新。
onClick={() => {
console.log("Clicked: ", props.rank, props.suit, selected);
setSelected(!selected)
console.log("selected: ", selected)
// props.handle_card_selected(props.id, selected)
}}
Run Code Online (Sandbox Code Playgroud)
useEffect(() => {
const check_border = () => {
if (selected) {
return "green"
}
return "black"
}
check_border()
}, [selected])
Run Code Online (Sandbox Code Playgroud)
You*_*saf 15
关于 React 中的状态更新,你需要了解两件事:
如果要记录 的更新值selected,请将日志语句放入钩子中useEffect。
您无法在同一渲染中更新和记录任何状态变量的更新值;组件必须重新渲染以反映由于状态更新而发生的变化。
同样,如果您想使用更新后的值调用函数selected,请从挂钩内部调用该函数useEffect。
setState是一个异步函数,这就是它不立即更新状态的原因。还有另一种方法,即传递函数 in setSelected,通过它您可以实现所需的行为:
onClick={() => {
console.log("Clicked: ", props.rank, props.suit, selected);
setSelected(prevSelected => {
// props.handle_card_selected(props.id, !prevSelected)
return !prevSelected
})
}}
useEffect(() => {
props.handle_card_selected(selected)
}, [selected, props.handle_card_selected])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
35869 次 |
| 最近记录: |