登录时 React 不响应 observable
React not responding to observable when logging in
我正在使用 Mobx 来管理我的 React webapp 和 firebase 的用户登录状态以进行授权。
我似乎无法弄清楚为什么我的 webapp 不响应用户实际登录。它总是停留在默认值已注销。
这是我的代码:
const App: React.FC<Props> = ({ basename }) => {
var isSignedIn = true
onAuthStateChanged(auth, (user) => {
if (user) {
// User is signed in, see docs for a list of available properties
// https://firebase.google.com/docs/reference/js/firebase.User
console.log("IS SIGNED IN");
isSignedIn = false;
} else {
// User is signed out
isSignedIn = true;
console.log("IS NOT SIGNED IN");
}
});
return (
<BrowserRouter basename={basename}>
<ThemeProvider>
<Switch>
<Route path="/error" component={ErrorsPage} />
<Route path="/logout" component={Logout} />
{
!isSignedIn?
<Route>
<PublicRoutes />
</Route>
:
<>
<MasterLayout>
<PrivateRoutes />
</MasterLayout>
</>
}
</Switch>
</ThemeProvider>
</BrowserRouter>
);
};
export { App };
当我 运行 它时,它正确地将我发送到登录页面,并且在控制台中我看到它写着“未登录”。登录后,我在控制台中看到它更新为“已登录”,但页面上没有任何反应?我无法访问常规网站,它一直将我重定向到登录页面,表明它无法将我识别为已登录用户。
但是,如果我将 isSignedIn 的默认值设置为 true,它会正确地将我定向到主页。
我做错了什么?
而不是像
那样直接赋值
isSignedIn = true;
在 React 中你应该使用 useState 钩子。
声明变量(它是 setter 函数)
const [isSignedIn, setIsSignedIn] = useState(false);
然后稍后更新值
setIsSignedIn(true);
否则,每当组件 re-renders 时都会重置该值。
https://reactjs.org/docs/hooks-state.html
我正在使用 Mobx 来管理我的 React webapp 和 firebase 的用户登录状态以进行授权。
我似乎无法弄清楚为什么我的 webapp 不响应用户实际登录。它总是停留在默认值已注销。
这是我的代码:
const App: React.FC<Props> = ({ basename }) => {
var isSignedIn = true
onAuthStateChanged(auth, (user) => {
if (user) {
// User is signed in, see docs for a list of available properties
// https://firebase.google.com/docs/reference/js/firebase.User
console.log("IS SIGNED IN");
isSignedIn = false;
} else {
// User is signed out
isSignedIn = true;
console.log("IS NOT SIGNED IN");
}
});
return (
<BrowserRouter basename={basename}>
<ThemeProvider>
<Switch>
<Route path="/error" component={ErrorsPage} />
<Route path="/logout" component={Logout} />
{
!isSignedIn?
<Route>
<PublicRoutes />
</Route>
:
<>
<MasterLayout>
<PrivateRoutes />
</MasterLayout>
</>
}
</Switch>
</ThemeProvider>
</BrowserRouter>
);
};
export { App };
当我 运行 它时,它正确地将我发送到登录页面,并且在控制台中我看到它写着“未登录”。登录后,我在控制台中看到它更新为“已登录”,但页面上没有任何反应?我无法访问常规网站,它一直将我重定向到登录页面,表明它无法将我识别为已登录用户。
但是,如果我将 isSignedIn 的默认值设置为 true,它会正确地将我定向到主页。
我做错了什么?
而不是像
那样直接赋值isSignedIn = true;
在 React 中你应该使用 useState 钩子。 声明变量(它是 setter 函数)
const [isSignedIn, setIsSignedIn] = useState(false);
然后稍后更新值
setIsSignedIn(true);
否则,每当组件 re-renders 时都会重置该值。 https://reactjs.org/docs/hooks-state.html