【发布时间】:2021-02-12 07:20:35
【问题描述】:
我正在为我的 React js 项目使用 firebase 身份验证。 Aim - 当用户转到路径 - '/home' 时,它应该检查用户是否登录。如果未登录,则重定向到路径 - '/' ,否则呈现组件“Home”。但是,当我运行代码时,函数 工作正常,但组件没有呈现在屏幕上。
App.js 代码 -
function App() {
var users;
function checkUserLoggedIn() {
firebase.auth().onAuthStateChanged(function (user) {
users = user;
console.log(users);
users ? <Home /> : <Redirect to="/" />;
});
}
return (
<div className="app">
<Router>
<Switch>
<Route exact path="/">
<Welcome />
</Route>
<Route path="/home">{checkUserLoggedIn()}</Route>
</Switch>
</Router>
</div>
);
}
知道为什么这不起作用吗? 谢谢!
【问题讨论】:
-
在 React 中,渲染函数是 100% 同步的,因此无法在异步回调中返回可渲染的 JSX。您也不会从
checkUserLoggedIn或 firebase 回调返回任何内容。 -
谢谢!有没有其他方法可以实现?
-
通常您会将身份验证检查/条件抽象到受保护的路由组件中,该组件要么呈现您想要的组件,要么将您弹回。检查auth workflow 示例。
标签: javascript reactjs react-router-dom