javascript - 更改时选择的useState钩子不一样
问题描述
我在选择中的选项中有一个 for 循环,每次我更改状态时,它都会更改为最后选择的值,而 e.target.value 是当前值,我希望它在里面有一个调度,这就是我没有这样做的原因它与我的选择元素上的 onChange 内联。
const [blk, setBlk] = useState(1);
const getBlks = () => {
let blks = [];
for (let i = 1; i <= 33; i++) {
blks.push(
<option key={i} value={i}>
{i}
</option>
);
}
return blks;
};
const blkHandler = e => {
console.log(e.target.value);
setBlk(e.target.value);
console.log(blk);
};
例如,当我将选择从 1 更改为 3 时,e.target.value 更改为 3,而 blk 为 1。不知道为什么它会更改为这种行为。
解决方案
问题是你的 console.log ...
从文档
setState() 不会立即改变 this.state 而是创建一个挂起的状态转换。在调用此方法后访问 this.state 可能会返回现有值。无法保证对 setState 的调用同步操作,并且可能会批处理调用以提高性能。
您可以使用 useEffect 挂钩来测试您的状态是否在功能组件中发生了变化,例如
useEffect(() => {
console.log(blk)
},[blk])
推荐阅读
- java - 如何将值分配给使用缓冲读取器直接从输入中获取的字符串数组?
- java - 为什么 lambda 中使用的局部变量必须是最终的或有效的最终变量?
- vb6 - How to set sticky variables in VB6
- python - How to convert strings to abbreviations
- java - AutoCompleteTextView Android Studio 中的 Google Place API
- image - 如何在 Flutter 中正确下载图片并转换为 base64?
- node.js - How to access a public certificate in a node.js azure function
- bash - 使用 sudo 压缩时 zip 命令 globbing 文件夹
- json - 我如何 grep 这个数据/json?
- php - 我如何从 mysql 数据库中回显枚举值?