reactjs - 反应登录表单未正确保存状态
问题描述
我有这个用于登录的 React Formik 表单。
我正在使用 Firebase 登录用户。
为了测试,我包含了两个 console.log 命令,一个在登录之前,一个在登录之后,以显示我登录状态的当前值。
当表单加载时,我按预期看到此控制台消息:
登录前——我登录了吗?错误的
然后我输入我的电子邮件和密码并点击登录。
我首先看到这条控制台消息,这对我来说很奇怪,因为它是 BEFORE 消息:
登录前——我登录了吗?真的
但随后它说我没有再次使用此消息登录:
登录后——我登录了吗?错误的
所以看起来它正在工作,但我不确定为什么它在说真之后又说假。
我觉得我有什么问题,或者我没有将状态设置在正确的位置,但我不知道发生了什么。
难道我做错了什么?
谢谢!
这是我的表格:
const LoginForm = () => {
const [loggedIn, setLogin] = useState(false);
console.log("BEFORE logging in -- Am I logged in? ", loggedIn);
return (
<>
<h1>Game List Login Form</h1>
<Formik
initialValues={{
password: '',
email: ''
}}
onSubmit={(values, actions) => {
setTimeout(() => {
//alert(JSON.stringify(values, null, 2));
firebase.auth().signInWithEmailAndPassword(values.email, values.password).catch(function (error) {
var errorCode = error.code;
var errorMessage = error.message;
});
actions.setSubmitting(false);
setLogin(true);
console.log("AFTER logging in -- Am I logged in? ", loggedIn);
}, 1000);
}}
>
<Form>
<MyTextInput
label="Email Address"
name="email"
type="email"
/>
<MyTextInput
label="Password"
name="password"
type="password"
/>
<br />
<Button type="submit">
Login
</Button>
</Form>
</Formik>
</>
);
};
export default LoginForm;
解决方案
用于useEffect
检查某些内容是否实际更新,因为此钩子函数将在渲染后触发
const LoginForm = () => {
const [loggedIn, setLogin] = useState(false);
useEffect( () => console.log("my login status", loggedIn), [loggedIn]);
// other logic...
推荐阅读
- r - ggplot PDF 导入 Inkscape 使用 alpha 时为 geom_point 点添加额外的空心圆
- node.js - 无法连接到mongodb集群
- amazon-web-services - GetObject 操作上的 AWS S3“拒绝访问”(使用 AES-256 服务器端加密)
- c# - 访问路径被拒绝。在c#中
- python - 基于最左索引将相关数学运算应用于多索引数据帧中的列
- frontend - 在角度 8 中使用 plotly.js 时如何修复“TypeError:这是未定义的”?
- sql - Find count of occurrence of a row
- c++ - C++:push_back() 函数不附加双值:分段核心转储
- python-3.x - 打印单引号的数据框字典
- python - 从包含其他标签的“a”标签中提取文本的美丽汤问题