javascript - 如何等待 onChange 事件使用反应钩子设置值?
问题描述
我想访问函数value
内部状态变量的值handleKeyDown
。但是,当我继续打字时,我注意到它value
没有设置为最新的输入值,而是设置为之前的输入状态。我使用setTimeout
了这样它handleChange
会被首先调用并且setValue()
函数会改变value
. 然后更改的值将反映在handleKeyDown
函数内部。
import "./styles.css";
import { useState } from "react";
export default function App() {
const [value, setValue] = useState("");
const handleChange = (e) => {
console.log("called handle changed");
setValue(e.target.value);
};
const handleKeyDown = (e) => {
console.log("called keydown");
console.log(value);
};
return (
<div className="App">
<input
value={value}
onChange={handleChange}
onKeyDown={(e) => setTimeout(() => handleKeyDown(e), 0)}
/>
</div>
);
}
e.target.value
显示最新和必需的值,但value
它本身显示旧值。如何等到handleChange
设置值 usingsetValue
和 use value
in handleKeyDown
?
解决方案
您可以使用 useRef 钩子获取当前值
`
import "./styles.css";
import { useState, useRef } from "react";
export default function App() {
const [value, setValue] = useState("");
const updatedValue = useRef("");
const handleChange = (e) => {
console.log("called handle changed");
setValue(e.target.value);
updatedValue.current = e.target.value;
};
const handleKeyDown = (e) => {
console.log("called keydown");
console.log(updatedValue.current);
};
return (
<div className="App">
<input
value={value}
onChange={handleChange}
onKeyDown={(e) => setTimeout(() => handleKeyDown(e), 0)}
/>
</div>
);
}
`
推荐阅读
- javascript - 模型 A 未关联模型 B 续集错误
- azure - 在 Azure 模板存储库中,有没有办法提及 azure 任务“pythonScript”的 filePath 参数的存储库?
- angular - 离子幻灯片在重新加载页面之前不起作用
- python - 将 echo 服务器作为守护进程运行以在 python 中进行测试
- bash - 为什么“哈希/bin/ls”什么都不做?
- bash - 使用 BASH 计算给定空格分隔数字数组中所有可能的总和组合
- php - 通过 php curl 下载文件时显示文件大小
- python - 结合 ListView 和 DetailView
- scala - 如何禁用 Heroku 上的 HTTP 请求和/或自动重定向到 HTTPS?
- reactjs - React - 窗口调整大小后获取 element.getBoundingClientRect()