下面是我的代码的一个片段。调用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();
}
);
}
在钩子中,由于钩子中没有setter的回调,我们可以在状态更改时使用use效应
。
useEffect(() => filteredData(), [state])
这就是use效应钩子的作用,因为setState钩子不像setState在类组件中那样具有回调。
useEffect(() => filteredData(), [state])
每次状态更改时,useEffect中的函数都将运行。正如saksh73所说,setState是异步的,但是它不返回promise,因此您不能对其调用
then
,也不能调用wait
it。您必须使用useEffect对状态更改做出反应,如图所示。
问题内容: 我正在做一个待办事项应用程序。这是违规代码的非常简化的版本。我有一个复选框: 这是调用复选框的函数: updateItem是映射为分派到redux的函数 我的问题是,当我调用updateItem操作并在console.log状态时,它总是落后1步。如果未选中该复选框且该复选框不为true,则仍将状态为true传递给updateItem函数。我是否需要调用另一个函数来强制状态更新? 问题
我想问一下,为什么在执行事件时,我的状态没有改变。我已经搜索到需要在构造函数中绑定函数,但是状态仍然没有更新。 下面是我的代码:
问题内容: 我想问为什么在执行onclick事件时状态没有变化。我已经搜索了一段时间,我需要在构造函数中绑定onclick函数,但状态仍未更新。这是我的代码: 问题答案: 这个回调真的很混乱。只需使用async await代替:
问题内容: 我想问一下为什么在执行onclick事件时状态没有变化。我已经搜索了一段时间,我需要在构造函数中绑定onclick函数,但状态仍未更新。这是我的代码: 问题答案: 幸运的是, setState进行了回调。这是我们获取更新状态的地方。考虑这个例子。 因此,当回调触发时,this.state是更新后的状态。你可以在回调中获取突变/更新的数据。
问题内容: 码: 当我在中输入内容时,以下内容将立即更改。是否可以配置它仅在输入所有字符并保留输入后才更新? 问题答案: 更新资料 正如许多人提到的那样,Angular现在使用指令对此提供了内置支持。在这里查看更多。 下面的旧答案: ng-model没有内置选项来更改该行为,但是您可以编写一个自定义指令来执行此操作。@Gloopy 写了这样的指令。你可以在这里看看小提琴。 该指令从和事件中注销,这
我正在尝试在react中开发todo应用程序。下面是代码。 当我在文本框中输入todo并单击添加时,todo将给出旧值。 例如,如果我输入“a”,则todo数组将给出,然后当我输入“b”时,todo显示。请帮忙。 编辑: 下面的工作