Teh*_*ila 3 nested-routes reactjs react-router react-navigation react-router-dom
我正在尝试在我的以下代码中使用嵌套路由Router.js:
return (
<Routes>
<Route path="" element={<Home />} />
<Route path="/DriverPage/*" element={<DriverPage />}>
<Route path="DriverSignUp" element={<DriverSignUp />}/>
<Route path="DriverLogin" element={<DriverLogIn />} />
</Route>
<Route path="/PassengerPage/*" element={<PassengerPage />} />
</Routes>
Run Code Online (Sandbox Code Playgroud)
DriverPage.js这是父路由组件中的代码:
return (
<>
<div className="driver-auth">
<button onClick={ ()=>navigate("DriverSignUp",{replace:true}) }> Sign up </button>
<button onClick={ ()=>navigate("DriverLogin",{replace:true}) }> Sign in </button>
</div>
<Outlet />
</>
Run Code Online (Sandbox Code Playgroud)
问题是我想在单击按钮时用嵌套组件替换父组件,因为我不希望父组件继续显示。
这就是为什么我尝试使用navigate("DriverLogin",{replace:true})但它没有帮助,并且单击时我会看到父路线和子路线。
我认为这是因为/*我在父路由路径中拥有,这意味着即使只是开始匹配它也匹配。
那么,是否有任何解决方案仍然使用嵌套路由,或者我不应该使用嵌套?
还有一个问题是:为什么替换不起作用?
谢谢!
这是 React Router dom 的默认行为
您可以通过两种方式获得结果
**1. 您可以单独定义这些路线**
<Routes>
<Route index element={<Home />} />
<Route path="DriverPage" element={<DriverPage />}/>
<Route path="DriverPage/DriverSignUp" element={<DriverSignUp />}/>
<Route path="DriverPage/DriverLogin" element={<DriverLogIn />} />
</Routes>
Run Code Online (Sandbox Code Playgroud)
**2. 像这样定义嵌套路由**
<Routes>
<Route index element={<Home />} />
<Route path="DriverPage/*" element={<DriverPage />}/>
</Routes>
Run Code Online (Sandbox Code Playgroud)
父组件
function DriverPage(){
<Routes>
<Route index element={your parent code} />
//your parent content only visible if path is /Driverpage.
<Route path="DriverSignUp" element={<DriverSignUp/>}/>
<Route path="DriverSignIn" element={<DriverSignIn/>}/>
</Routes>
}
export default <DriverPage/>;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6163 次 |
| 最近记录: |