javascript - 为什么 React setState hook 没有立即更新?
问题描述
我正在尝试使用更新的状态值作为参数从父函数调用处理程序,但是,在调用 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)
}}
useEffect(() => {
const check_border = () => {
if (selected) {
return "green"
}
return "black"
}
check_border()
}, [selected])
解决方案
关于 React 中的状态更新,你需要知道两件事:
- 状态是异步更新的
- 在任何特定的渲染中,状态和道具都不会改变,只有在组件重新渲染时才会反映变化
如果要记录 的更新值selected
,请将 log 语句放入useEffect
钩子中。
您不能在同一渲染中更新和记录任何状态变量的更新值;组件将不得不重新渲染以反映由于状态更新而发生的变化。
类似地,如果您想调用更新值为 的函数,请从钩子selected
内部调用该函数。useEffect
推荐阅读
- javascript - 未知选项 eventDrop 错误
- reactjs - 重新渲染 GoogleMapReact
- javascript - 返回原始页面并成功消息。Boostramp + PHPMailer
- java - 即使存在主类,Java 也找不到主类
- wordpress - 重建媒体库 db - 我错过了什么?
- objective-c - 如何获得最前面的流程序列?- Applescript / Swift / Objetive-C
- android - 图像未显示在回收站视图中
- c++ - 连接 C++ 和 Node JS
- ubuntu - WSL2:为什么我必须在重启 PC 后关闭 WSL 才能重启 WSL
- javascript - 对 ruby 服务器的 Ajax 查询