【发布时间】:2021-12-30 18:38:16
【问题描述】:
我有以下swtich 使用react-router。当我打开 new 选项卡并转到任何路径时,它总是重定向到 /login。如果我删除底部开关(没有路径 - 默认),它会按预期工作。如果我导航到任何路径已经加载 react 应用程序(即来自/login),它会按预期工作。
当包含 nomatch 时,为什么开关明显没有检测到正确的路径仅在第一次加载时?
编辑:为清楚起见,这是在localhost、react-router-dom v5.2 上使用hashRouter
<Switch>
<div className="loginForm align-middle">
<img src="./img/logo.svg" alt="Restocker logo" className="w-100 p-3 mb-4"/>
<Route path="/verify">
<Verify/>
</Route>
<Route path="/reVerify">
<ReVerify/>
</Route>
<Route path="/register">
<Register/>
</Route>
<Route path="/forgotPassword">
<ForgotPassword/>
</Route>
<Route path="/resetPassword">
<Verify type={"password"}/>
</Route>
<Route path="/login">
<Login/>
</Route>
<Route> //same result using path="*"
//no match - default to login
<Redirect to="/login"/>
</Route>
</div>
</Switch>
类似的主题似乎不适用于这种情况 - 要么指根本不匹配(我的一旦加载就会匹配),要么来自更旧的 (2015) 版本。
【问题讨论】:
-
如果您希望
Switch组件正常工作,应该直接包装Route组件。使用Switchoutside 包装器div时,所有内部路由都被包含性地匹配和渲染,因此渲染Redirect的通用路由总是被匹配和渲染。路由不工作时的 URL/路径是什么? -
@DrewReese 抱歉,我错过了您的评论,但通过反复试验得出了相同的结论 - 您完全正确的是导致行为的间接包装 - 谢谢!
标签: javascript reactjs react-router react-router-dom