reactjs - 登录 React 页面显示登录页面只有几分之一秒
问题描述
我是 React/Redux 的新手。我正在尝试在 Youtube ( https://www.youtube.com/watch?v=unr4s3jd9qA ) 中遵循本教程。一切都按照视频中的方式进行。但是,当我以用户身份登录时刷新页面时,登录屏幕会闪烁几分之一秒,然后重定向到主屏幕。这两天我一直在努力寻找解决方案。任何帮助,将不胜感激。
谢谢
解决方案
问题是 auth.onAuthStateChanged 函数是异步的,并且在第一次渲染后运行的 useEffect 中调用。因此,在子组件已经渲染后,您将获得一个 currentUser 对象。我不知道firebase,但你可以尝试的是:
const [currentUser, setCurrentUser] = useState(firebase.auth().currentUser);
但我不认为这firebase.auth().currentUser
是同步的,所以 currentUser 仍null
处于初始化状态;
接下来,您可以尝试区分“用户状态未知,也就是尚未调用”和“用户未登录”状态,并且如果状态未知,则不要渲染某些内容。这应该有效:
const [currentUser, setCurrentUser] = useState(false);
useEffect(...);
if (currentUser === false) {
return null;
}
return (...);
如果你不做服务端渲染,你总是会遇到这种问题。看看例如nextjs。这是一个简单的 SSR 解决方案。
推荐阅读
- oauth-2.0 - 使用 localhost 测试 Google Oauth 2.0(2019 年 6 月)?
- javascript - 无权担任提供的角色
- jquery - 更改表单中提交的输入类型的重定向路径url
- r - 将文本或标题添加到 R 图形/绘图中
- node.js - MongoDB 按非索引字段排序的最佳实践
- javascript - React:如何在数据的 fromat 中呈现 API 响应数据:Array(i) 以响应前端?
- css - 从孩子身上移除变换和透视。not() 和重新指定不起作用
- node.js - 是否可以调试节点内部模块?
- unit-testing - AssertJ:记录所有通过(和失败)的断言
- php - WordPress:在 functions.php 中运行多个数组以添加自定义字段