javascript - React Context Hook 状态没有改变
问题描述
我正在创建一个简单的 MERN 身份验证,我的后端工作得很好,并且已经用邮递员对其进行了测试,它在检查用户是否登录时会给出布尔响应。
下面是路由器检查登录用户,并将布尔值发送到前端。
router.get("/loggedIn", (req, res) => {
try {
const token = req.cookies.token;
if (!token) return res.json(false);
jwt.verify(token, process.env.JWT_SECRET);
res.send(true);
} catch (err) {
res.json(false);
}
});
在 React 中,我使用 Context Hook 来使用 Axios 获得响应。
import React, { useState, useEffect, createContext } from "react";
import Axios from "axios";
const AuthContext = createContext();
function AuthContextProvider(props) {
const [loggedIn, setLoggedIn] = useState(undefined);
const getLoggedIn = async () => {
await Axios.get("http://localhost:5000/auth/loggedIn")
.then((res) => setLoggedIn(res.data))
.catch((err) => console.log(err));
};
useEffect(() => {
getLoggedIn();
}, []);
return (
<AuthContext.Provider value={{ loggedIn, getLoggedIn }}>
{props.children}
</AuthContext.Provider>
);
}
export default AuthContext;
export { AuthContextProvider };
我正在使用有条件地渲染某些组件,但是如果我从开发工具条件渲染中更改状态loggedIn
,它的值或状态始终保持不变。false
AuthContext
执行,
const { loggedIn } = useContext(AuthContext);
{loggedIn === false && (
<Link className="nav-link" to="/login">
<FaUser />
</Link>
)}
{loggedIn === true && (
<Link className="nav-link" to="/logout">
<Button variant="outline-dark">Logout</Button>
</Link>
)}
如您所见,我只想有条件地渲染一个组件,但它总是返回false
我是 ContextHook 的新手。
解决方案
推荐阅读
- angular - mat-select 在我点击它之前不会显示
- python-3.x - Pandas DataFrame 错误:ValueError:StringArray 需要一系列字符串或 pandas.NA
- reactjs - 如何解决 TypeError:this.state.person 未定义
- node.js - knex js查询多对多
- c++ - 致命错误:opencv2/tracking.hpp:没有这样的文件或目录#include
- typescript - 基于以枚举为键的类型的打字稿函数参数
- asp.net-core - 配置 blazor wasm 和单独的 identityserver4
- python - CalibratedClassifierCV 不适用于 Pandas DataFrame for Pipeline?
- node.js - 在中间件 (err, req, res, next) 中添加 err 会导致 express 跳过中间件
- doxygen - 我可以让 Doxygen 在函数原型上使用未标记的注释吗?