我对 useContext 钩子应该如何在“全局”状态下工作感到有点困惑。
这是我的 App.js:
import React from 'react';
import Login from './Components/auth/Login';
import './App.css';
import AuthState from './Context/auth/AuthState';
import { BrowserRouter as Router, Route } from 'react-router-dom';
import Dashboard from './Components/dashboard/DashBoard';
import CollectionState from './Context/collection/CollectionState';
import Collection from './Components/collection/Collection';
import PrivateRoute from './routing/PrivateRoute';
import AddCollectionItem from './Components/collection/AddCollectionItem';
import AddUser from './Components/Users/AddUser';
import Settings from './Components/admin/Settings';
function App() {
return (
<AuthState>
</AuthState>
以下是我的一个子组件的导入和设置语句:
import React, { useContext, useEffect } from 'react';
import { Route, Redirect } from 'react-router-dom';
import AuthContext from '../Context/auth/authContext';
import Loading from '../utils/Loading';
import Can from '../Components/auth/Can';
const PrivateRoute = ({ component: Component, ...rest }) => {
const authContext = useContext(AuthContext);
const { isAuthenticated, loading, user } = authContext;
const { type, perform } = rest;
useEffect(() => {
authContext.loadUser();
// eslint-disable-next-line
}, []);
我的 AuthContext 正在从设置中返回 AuthContext.Provider。
<AuthContext.Provider
value={{
token: state.token,
isAuthenticated: state.isAuthenticated,
loading: state.loading,
user: state.user,
error: state.error,
register,
loadUser,
login,
logout,
clearErrors,
}}
>
{props.children}
</AuthContext.Provider>
);
};
基本上 - 我使用 AuthContext 为组件提供基本的前端验证,然后使用后端验证该验证。
问题是当我在子组件中使用 useContext 挂钩时,它会在子组件中创建重复的上下文。由于我将其用于组件验证,因此在子组件中可访问这些方法会很有帮助,因此我可以根据用户访问等返回它的不同部分。
有没有办法在不实例化子组件内的新上下文的情况下访问全局上下文?我正在使用我遵循的教程中的这个上下文模板,虽然我理解了 useContext 的概念,但我似乎在这里缺少一个关键组件。