javascript - 为什么在 React Hooks 中循环内的 javascript 触发的点击事件不会每次都更新状态?
问题描述
我有一个复选框和一个按钮。
当我单击复选框时,count
使用 更新setCount
并增加 1
。
当我单击按钮时,我想单击checkbox
10 次。
因此,setCount
应该更新count
值10 次,最终值count
应该是10。
import { useEffect, useState } from "react";
export default function App() {
const [count, setCount] = useState(0);
useEffect(() => {
console.log("count updated to :", count);
}, [count]);
return (
<div className="App">
<button
id="start"
onClick={(e) => {
for (let i = 0; i < 10; i++) {
document.getElementById("check").click();
}
}}
>
start
</button>
<input
id="check"
type="checkbox"
value={count}
onClick={(e) => setCount(count + 1)}
/>
</div>
);
}
但问题是当我点击按钮时, count 只增加了1。我确信它与React Hooks的异步性有关。
如何使复选框单击并正确更新状态 10 次?
解决方案
使用 react 时直接访问 DOM 元素通常不是一个好主意。我不明白为什么这可能无法解决您的问题:
<button
id="start"
onClick={(e) => {
setCount(pc=>pc+10)
}}
>
如果您需要查看点击事件,您可以随时执行一些异步操作,在某种超时期间增加计数值。但是,如果您确实需要在复选框上执行单击事件,则可以使用refs。
推荐阅读
- vue.js - Vuetify v-text-field 更改值
- java - Javafx - 将项目添加到与另一个类文件夹不同的类文件夹中的可观察列表的正确方法是什么
- r - 机器学习:R 中逻辑回归的随机梯度下降:计算 Eout 和平均时期数
- php - Vich上传包没有在上传文件夹中保存大图像
- python - 从包含不同键/值的另一个对象中选择 JSON 键
- php - Laravel 5.5:获取服务提供者中的所有注册路由
- css - 根据里面的内容调整绝对定位元素的宽度
- json - 使用 NodeJS 和 Axios 获取 IoT 代理
- linux - NVIDIA Jetson TX2 中无法识别的命令行选项“-m64”
- wpf - 如何发布添加到 Xamarin.Forms 的 WPF 应用程序?