javascript - 挂钩值不会在重复调用中更新
问题描述
我可以在 useEffect 中看到我的状态值正在更新,但是,在每 5 秒触发一次的函数中,该值仍然相同。有没有办法解决这个问题?
const [check, setCheck] = useState(true);
// Button to toggle Check
const buttonToToggleCheckValue = () => {
console.log("Toggle check");
setCheck(!check);
};
// Call this function every 5 seconds
const triggeredEveryFiveSeconds = () => {
console.log("Check value: " + check);
};
useEffect(() => {
console.log("useEffect Check value: " + check);
}, [check]);
---output---
Check value: true
Check value: true
Check value: true
Toggle check
useEffect Check value: false
Check value: true <--- Value should be false
Check value: true
Check value: true
解决方案
问题是,每当状态更改时,您的组件都会重新渲染并将状态初始化为 true。您可以使用 useRef ,如下面的代码片段所示。
const check = useRef(true);
// Button to toggle Check
const buttonToToggleCheckValue = () => {
console.log('Toggle check');
check.current = !check.current
};
// Call this function every 5 seconds
const triggeredEveryFiveSeconds = () => {
console.log('Check value: ' + check.current);
};
useEffect(() => {
console.log('useEffect Check value: ' + check.current);
}, [check]);
useEffect(() => {
setInterval(() => {
triggeredEveryFiveSeconds();
}, 5 * 1000);
}, []);
ref 将在多个渲染中保持该值。
推荐阅读
- javascript - 向电报机器人发送消息
- javascript - 如何在 chrome devtools 中隐藏源代码?
- javascript - 如果在 Select Dropdown 插件上添加了类,则按钮事件不起作用
- python - WSL ubuntu 环境中的 PIP 安装错误
- react-native - 如何访问屏幕组件内的 NavigatorScreen > 选项?
- r - 如何在 mij 条形图中同时拥有实际计数和分组百分比?
- c - C 等效函数
- vue.js - 如何从 Vue 到 Nuxt?
- kotlin - 如何在自定义 gradle 插件中配置 javafx 插件?
- python - Python Azure Function 进程文件