javascript - useState 没有立即更新
问题描述
这是我的代码的一个片段。当我调用filteredData() 时,状态没有更新。在状态更新之前,我必须单击该按钮两次。这是一个旧项目,我正在使用钩子进行更新。我之前在设置状态后使用了一个回调函数,但是我不能用钩子来做到这一点。
function change(event) {
let name = event.target.name;
let value =
event.target.type === "checkbox"
? event.target.checked
: event.target.value;
setState((prevState) => ({ ...prevState, [name]: value }));
filteredData()
}
解决方案
这是因为 setState 是一个异步函数,如果您需要在设置状态后立即执行任何任务……您应该在回调中执行。
在类组件
function change(event) {
let name = event.target.name;
let value =
event.target.type === "checkbox"
? event.target.checked
: event.target.value;
this.setState(
(prevState) => {
return {
...prevState,
[name]: value
};
},
() => {
filteredData();
}
);
}
在 hooks
中由于 hooks 中没有 setter 的回调,我们可以useEffect
在状态改变时使用。
useEffect(() => filteredData(), [state])
推荐阅读
- regex - 带有正则表达式的 sed 命令
- css - 如何导入 CSS 模块 React 和 JSX?( 错误 )
- python-3.x - Pandas 1.0.0 与 python 3.5 不兼容
- wordpress - 在 Woocommerce 中将一个类别限制为一种产品
- airflow - 我能否以编程方式确定 Airflow DAG 是计划触发还是手动触发?
- python-3.x - 如何简化 Python 3 中的嵌套 If 以获得更好的性能和可读性?
- c++ - Qt Quick,如何更改 Ui 源?
- jobs - AUTOSYS JOB 创建
- .htaccess - 强制子域中的 .htaccess 为 OPTIONS 请求返回响应 200
- php - 如何从输入的html中获取价值