我还有一段代码,想知道react-router
url匹配的原理。例如,下面的代码没有在"/login"
下渲染Layout
组件,这是我想要的效果,但我想知道 * 为什么 *。有人能解释一下吗
<Router>
<Suspense fallback={<PageLoading />}>
<Routes>
<Route
path='/*'
// Layout render another routes but no /login path
element={<Layout /> }
/>
<Route
path='/login'
element={<LoginPage />}
/>
</Routes>
</Suspense>
</Router>
布局代码
const Layout = () => {
return (
<div>
<div>main page xxxx</div>
<div>
<Routes>
<Route
path='/demo1'
element={<Demo1 /> }
/>
<Route
path='/demo2'
element={<Demo2 /> }
/>
</Routes>
</div>
</div>
)
}
当path是"/login"
时,Layout
组件会呈现一些东西吗?react-router@6
如何匹配url?
2条答案
按热度按时间8e2ybdfx1#
基本要点是,
react-router
通过conditionally rendering选择的UI工作,该UI基于将当前URL路径与一组配置的路由相匹配。react-router@6
中的路由匹配使用路径排名系统来计算给定Routes
组件中所有路由路径的得分或排名。Routes
组件获取当前的URL路径,并将其与它所管理的最高排名的路由(按路径)进行匹配。一般来说,路由路径越具体,排名越高。排名主要用于打破竞争匹配之间的联系,因为最终只有1可以被匹配和渲染。可以将
Routes
组件视为switch
语句,其中条件是与当前URL路径匹配的路径。事实上,Routes
组件取代了旧的v5Switch
组件。对于路由配置:
当URL为
"domain/login"
时,最佳匹配显然是"/login"
路由。将匹配此路由并渲染LoginPage
。Layout
组件根本没有渲染,甚至没有挂载到ReactTree中。另一方面,当URL不是
"domain/login"
(类似"domain/foo"
)时,则"/login"
无法匹配,排名第二的路由"/*"
是最佳匹配,并呈现Layout
组件。LoginPage
现在根本没有渲染或挂载。2ledvvac2#
在react-router中,您不能这样使用它。在第一个块中,您已经声明了,这就是为什么您不能在布局中推另一个。解决方案将是这样的,你可以试试这个:
在布局上,你可以这样尝试