[英]React router v6, JSX component passed as Route element is not triggered
I'm trying to set a persistentLogin component that verifies is the user still has a valid refresh token and if so, send a new access token.我正在尝试设置一个 persistentLogin 组件来验证用户是否仍然具有有效的刷新令牌,如果是,则发送一个新的访问令牌。
Here is the code in the router:这是路由器中的代码:
const Routes = () => {
const { user } = useAuth();
return (
<Router>
<Route index element={<Home />} />
<Route path='auth-form' element={<AuthForm />}>
<Route path='register' element={<Register />} />
<Route path='login' element={<Login />} />
</Route>
------->>> Here is the component
<Route element={<PersistLogin />}>
{user && (
<>
{user.isDev ? (
<>
{DEV_NAVIGATION.map((nav) => (
<Route key={nav.path} path={`${nav.path}`} element={nav.component} />
))}
</>
) : (
<>
{RECRUITER_NAVIGATION.map((nav) => (
<Route key={nav.path} path={`${nav.path}`} element={nav.component} />
))}
<Route path='/*' element={<Navigate to='/' replace={true} />} />
</>
)}
</>
)}
</Route>
<Route path='/*' element={<Navigate to='/' replace={true} />} />
</Router>
);
};
And here is the code in PersistentLogin.tsx:这是 PersistentLogin.tsx 中的代码:
const PersistLogin = () => {
const [isLoading, setIsLoading] = useState(true);
const refresh = useRefreshToken();
const { access_token } = useAuth();
useEffect(() => {
const verifyRefreshToken = async () => {
try {
await refresh();
} catch (e) {
console.log(e);
} finally {
setIsLoading(false);
}
};
!access_token ? verifyRefreshToken() : setIsLoading(false);
}, [access_token, refresh]);
return <>{isLoading ? <p>...Is loading</p> : <Outlet />}</>;
};
export default PersistLogin;
But I don't why when the user lands on home page of the website ('/'), the component isn't triggered, any body has an idea why?但是我不知道为什么当用户登陆网站的主页('/')时,该组件没有被触发,任何人都知道为什么?
It doesn't appear any of the Route
components are rendered by the Routes
component ( Routes
from react-router-dom
, not your Routes
which will need to be renamed ).似乎没有任何
Route
组件是由Routes
组件呈现的( Routes
react-router-dom
的Routes
,而不是需要重命名的 Routes )。
Example:例子:
const AppRoutes = () => {
const { user } = useAuth();
return (
<Router>
<Routes> // <-- routes rendered into Routes component
<Route index element={<Home />} />
<Route path='auth-form' element={<AuthForm />}>
<Route path='register' element={<Register />} />
<Route path='login' element={<Login />} />
</Route>
<Route element={<PersistLogin />}>
{user && (
<>
{(user.isDev ? DEV_NAVIGATION : RECRUITER_NAVIGATION)
.map((nav) => (
<Route key={nav.path} path={nav.path} element={nav.component} />
))
}
</>
)}
</Route>
<Route path='/*' element={<Navigate to='/' replace />} />
</Routes>
</Router>
);
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.