javascript - 为什么 React Hooks 不更新数据
问题描述
我尝试使用获取的数据更新useState中的值。当我控制台.log data.success它返回true。然后我将它分配给成功值。但它返回false!为什么?为什么价值成功不会立即更新。最后,我从服务器收到登录成功的消息。SIGN IN success: false 用户 admin 已登录
const Signin = () => {
const [values, setValues] = useState({
success: false
});
const { success } = values;
const clickSubmit = async event => {
event.preventDefault();
const signReact = catchAsync(async (email, password) => {
const data = await signin(email, password) // fetch data from the server
console.log(data.success); // -> true
if (data) {
setValues({
...values, success: data.success // -> assign to success
});
console.log("SIGN IN success: " + success); // -> false! why?!
}
return data;
});
signReact(email, password);
};
解决方案
setState()
是一个异步函数。所以你不能在下一个语句中打印它。这需要一些时间。要查看更新的状态值,你可以useEffect()
像这样登录它
useEffect(()=>{
console.log(values);
},[values])
推荐阅读
- spring - 使用 refrest 令牌时 Spring Boot JWT 令牌无效签名
- reactjs - 我想使用我的反应应用程序的输入字段将数据保存在我的 hasura API 数据库中
- sql - PATINDEX 通配符的数量/范围
- sed - sed 替换包含 '/' 和空格的整行匹配字符串,用另一个字符串替换它
- javascript - 所以我有这个书签,但我不喜欢窗口的位置。我怎么能把它放在左下角,而不是右上角?
- javascript - 处理请求中的多个克隆输入
- html - 管理角度组件高度以适应屏幕的最佳方法
- javascript - 如何在 VueJs 的数据表中显示数据?
- javascript - 在 iframe / object 标签内运行时更新初始路由器 url
- javascript - 如何在 Express 中重复某些内容?