我使用“反应上下文”将状态user
传递给子组件。
问题:每次重新加载页面时,状态user
的值为空。这导致页面在重定向到'/ dashboard`之前短暂地重定向到/login
。这样可以防止用户手动访问页面。
目标:如何在渲染之前等待状态user
?
App.js
function App() {
const [user, setUser] = useState(null);
useEffect(() => {
firebase.auth().onAuthStateChanged((user) => {
if (user) setUser(user);
else setUser(null);
});
}, []);
return (
<Router>
<AuthDataContext.Provider value={user}>
<Layout>
<Routes />
</Layout>
</AuthDataContext.Provider>
</Router>
);
}
路线
export const Routes = () => {
const user = useContext(AuthDataContext);
if (user) {
return (
<Switch>
<Route path="/dashboard" component={Dashboard} />
<Route path="/list" component={List} />
<Redirect to="/dashboard" />
</Switch>
);
} else {
return (
<Switch>
<Route path="/login" component={LogIn} />
<Route path="/register" component={Register} />
<Route path="/passwordreset" component={PasswordReset} />
<Redirect to="/login" />
</Switch>
);
}
};
authdata
import React from "react";
export const AuthDataContext = React.createContext(null);
编辑:快速修复 App.js
const [user, setUser] = useState("first");
路线
else if (user === "first") return null
答案 0 :(得分:0)
您可以使用一个组件来启动API调用,并在用户等待响应时呈现某种类型的加载器。然后,如果用户通过了身份验证,则可以呈现常规的应用程序路由;否则,可以呈现sign in
,sign up
等的路由。