reactjs - 反应路由器dom v6
问题描述
当条件错误时,我无法理解如何进行强制重定向。
{
login ? (
<Routes>
<Route path='/profile' element={<Profile/>}/>
<Route path='/chat' element={<Chat/>}/>
<Route path='/' element={<UserList/>}/>
</Routes>
) :
(
<Routes>
<Route path='/login' element={<Login/>}/>
<Navigate to='/login' state={{from: location}}/>
</Routes>
)
}
怎么了?
解决方案
您正在根据登录状态创建一组不同的路由。那是错误的。您的路线不应受到限制。相反,您想要的是重定向(V6 中的术语是navigate)用户从他不允许访问的页面到他所在的页面。同样,如果请求的路线不存在,这将很难实现。
以下是您可以解决的方法:
<Routes>
<Route path="/" element={<PublicPage />} />
<Route path="/login" element={<LoginPage />} />
<Route
path="/protected"
element={
<RequireAuth>
<ProtectedPage />
</RequireAuth>
}
/>
</Routes>
和:
const RequireAuth = () => {
let auth = useAuth();
if (!auth.user) {
return <Navigate to="/login" />;
}
return children;
}
推荐阅读
- bash - 如果 bash 中存在以 1 到 10 结尾的前 10 个文件而不需要循环,如何检查 Bash?
- android - Android ListView改变bg颜色但留下onclick动画
- ruby-on-rails - 如何将其他同名和 date_posted 的帖子计算为当前帖子?
- javascript - bot framework v 4.5 如何在选择提示中添加额外的元数据
- node.js - Sequelize 关联的某些设置不起作用
- mongodb - 如何在mongodb中加入两个集合
- scala - Java NIO OP_WRITE 事件触发 3 次
- python - 在 Pipfile 中生成包和 dev-packages 到 requirements.txt
- java - 界面中的阻塞方法供用户使用
- python - 如何修复 LDA 模型一致性得分运行时错误?