javascript - React - 身份验证的无效挂钩调用问题
问题描述
我对我的 react spa 应用程序使用令牌身份验证。我正在尝试使用 React 钩子添加令牌。
对于这个小例子,我有一个三个文件。
- AuthContex.js
- AuthReducer.js
- 身份验证服务.js
当用户点击登录按钮时,在登录功能中调用 authentication-service.js。当用户登录时,我需要借助钩子将令牌注册到状态中。因为,我需要在应用程序中的任何时候刷新令牌,并且由于此刷新,令牌没有正确分发到所有组件。我想通过将令牌放在所有组件的顶部来解决这个问题。因此,如果令牌在应用程序中的任何时间被刷新,它将被正确地分发给子组件。
但是反应给出了错误--->>
× 未处理的拒绝(错误):无效的挂钩调用。钩子只能在函数组件的主体内部调用。这可能由于以下原因之一而发生:
- 你可能有不匹配的 React 版本和渲染器(例如 React DOM)
- 您可能违反了 Hooks 规则
- 你可能在同一个应用程序中拥有多个 React 副本
function login(username, password) {
const { authDispatch } = useContext(AuthContext);
return axios.post('/api/Authentication/SignIn', {
email: username,
password: password
})
.then((res) => {
// store user details and jwt token in local storage to keep user logged in between page refreshes
localStorage.setItem('auth-jwt', JSON.stringify(res.data));
currentUserSubject.next(res);
authDispatch({ type: LOGIN, payload: res.data });
return res;
}).catch(handleResponse);
}
请参阅我的CodeSandbox以获得一个小演示。
解决方案
推荐阅读
- typescript - Fullcalendar v5 未出现在 JHipster 项目中
- c++ - setlocale() 不从 bindtextdomain() dir C++ 中读取
- c++ - 结构中的 C++ 私有变量在不使用 mutator func 的情况下被修改,不知道为什么?- OpenGL粒子系统
- excel - 使用 VBA 或手动对 MS excel 中的字母数字文本进行排序
- r - 从具有地理坐标 R 的轨迹创建归一化的成对矩阵
- laravel - 如何在一个查询中存储多个数组 laravel
- javascript - React Checkbox:子节点的更改无法重新渲染父节点?
- python - 如何解决python中的410:Gone错误
- angular - Nebular Nb 输入空字符串
- reactjs - Disable select(dropdown) on checkbox click (React JS and Material UI)