javascript - PrevState 在 React JS 中不会立即更新状态值
问题描述
我正在尝试使用 prevState 立即更新状态值,但值不会改变。我知道 seState 是异步函数,但如果我使用 prevState,不应该立即更新吗?我在哪里做错了?
count: 0
this.setState((prevState) => ({
count: prevState +1
}));
console.log(this.state.count+" count")
解决方案
如您所知 setState 是异步的。但也要了解如果你在 setstate 中传递回调,那么你需要调用prevState.something
as something is your state
。所以基本上你需要这样做:
this.setState(
(prevState) => ({
count: prevState.count + 1
}),
() => {
console.log(this.state.count + " count");
}
);
这是POC:
import React from "react";
import "./styles.css";
class Test extends React.Component {
state = {
count: 0
};
handleClick = () => {
this.setState(
(prevState) => ({
count: prevState.count + 1
}),
() => {
console.log(this.state.count + " count");
}
);
};
render() {
return (
<>
{this.state.count}
<button onClick={this.handleClick}>Click </button>
</>
);
}
}
export default function App() {
return (
<div className="App">
<h1>Hello CodeSandbox</h1>
<Test />
</div>
);
}
这是演示:https ://codesandbox.io/s/serene-beaver-cu4bl?file=/src/App.js:0-596
推荐阅读
- android - 为什么从 jobject 或 jclass 或简单的 QString 创建 QAndroidJniObject 失败而没有错误?
- mysql - 使用 INNER JOIN 更新 sql 数据
- excel - Excel:根据 2 个标准返回范围内的值
- rest - 在openbmc中,xyz路径和/redfish/v1路径有什么区别
- android - Android webview recaptcha 挑战
- reactjs - react-csv 下载一个没有扩展名的文件
- html - 是否有 XPath 表达式来获取嵌套在脚本标记中的值
- html - 如何减少引导行内 div 的上边距
- makefile - 如何使用llvm生成的汇编语言打开stm32板上的LED?
- flutter - 颤动的 ListView.builder 有时会显示空白或空数据