React Router v6 Link 组件未更改根页面 url
React Router v6 Link component not changing the page at root url
我在 Post
上创建了一个 Link
link 到 Post Page
。当 link 与 url 在 '/'
处单击时,link 无法正常工作,它会在 url 中显示正确的 link例如http://localhost:3000/posts/624a771b42211849eaada885
但是页面没有重定向,唯一有效的方法是刷新页面。但是,如果我在 Popular Posts
页面上,link 可以正常工作。需要明确的是,Post 位于名为 Posts 的组件中,该组件显示所有 Posts。 Posts组件是一个跨多个组件的共享组件,例如主页('/'
)和热门Posts(/popular
)link作品除了 '/'
以外的所有其他页面
下面是Link
.
<Link to={`/posts/${_id}`}>
<h2 className='post-title'>{title}</h2>
</Link>
我的路线设置如下:
<Route element={!token ? <Navigate replace to='/login' /> : <Navbar />}>
<Route
path='/'
element={<Home />}
>
<Route
path='/popular'
element={<Popular />}
/>
<Route
path='/posts/:postId'
element={<PostPage />}
/>
</ Route>
</Route>
在我的导航栏中我有:
const Navbar = () => {
return(
<>
<nav>
</nav>
<Outlet />
</>
)
}
最后,在我的 Home.js 中,我有这个:
const Home = () => {
return (
<div>content</div>
<div>content</div>
<div className='home-posts-container'>
{window.location.pathname === '/' ? <PopularPosts /> :
<Outlet />}
</div>
<div>content</div>
)
}
据我所知,你的 Home
组件具有
const Home = () => {
return (
<>
<div>content</div>
<div>content</div>
<div className="home-posts-container">
{window.location.pathname === "/" ? <PopularPosts /> : <Outlet />}
</div>
<div>content</div>
</>
);
};
当路径为 "/"
时,您想要 准确地 渲染 PopularPosts
组件,否则您想要渲染匹配的嵌套路由之一。
问题是在上述实现中,当路径更改时 Outlet
不会呈现,因此 none 的嵌套路由是可匹配的。
您似乎希望 Home
组件成为布局路由,它应该呈现所有 div
元素和内容,并且只是Outlet
。将 PopularPosts
组件移动到索引路由中。
const Home = () => {
return (
<>
<div>content</div>
<div>content</div>
<div className="home-posts-container">
<Outlet />
</div>
<div>content</div>
</>
);
};
...
<Routes>
<Route element={!token ? <Navigate replace to="/login" /> : <Navbar />}>
<Route path="/" element={<Home />}>
<Route index element={<PopularPosts />} />
<Route path="/popular" element={<Popular />} />
<Route path="/posts/:postId" element={<PostPage />} />
</Route>
</Route>
</Routes>
有关详细信息,请参阅:
我在 Post
上创建了一个 Link
link 到 Post Page
。当 link 与 url 在 '/'
处单击时,link 无法正常工作,它会在 url 中显示正确的 link例如http://localhost:3000/posts/624a771b42211849eaada885
但是页面没有重定向,唯一有效的方法是刷新页面。但是,如果我在 Popular Posts
页面上,link 可以正常工作。需要明确的是,Post 位于名为 Posts 的组件中,该组件显示所有 Posts。 Posts组件是一个跨多个组件的共享组件,例如主页('/'
)和热门Posts(/popular
)link作品除了 '/'
下面是Link
.
<Link to={`/posts/${_id}`}>
<h2 className='post-title'>{title}</h2>
</Link>
我的路线设置如下:
<Route element={!token ? <Navigate replace to='/login' /> : <Navbar />}>
<Route
path='/'
element={<Home />}
>
<Route
path='/popular'
element={<Popular />}
/>
<Route
path='/posts/:postId'
element={<PostPage />}
/>
</ Route>
</Route>
在我的导航栏中我有:
const Navbar = () => {
return(
<>
<nav>
</nav>
<Outlet />
</>
)
}
最后,在我的 Home.js 中,我有这个:
const Home = () => {
return (
<div>content</div>
<div>content</div>
<div className='home-posts-container'>
{window.location.pathname === '/' ? <PopularPosts /> :
<Outlet />}
</div>
<div>content</div>
)
}
据我所知,你的 Home
组件具有
const Home = () => {
return (
<>
<div>content</div>
<div>content</div>
<div className="home-posts-container">
{window.location.pathname === "/" ? <PopularPosts /> : <Outlet />}
</div>
<div>content</div>
</>
);
};
当路径为 "/"
时,您想要 准确地 渲染 PopularPosts
组件,否则您想要渲染匹配的嵌套路由之一。
问题是在上述实现中,当路径更改时 Outlet
不会呈现,因此 none 的嵌套路由是可匹配的。
您似乎希望 Home
组件成为布局路由,它应该呈现所有 div
元素和内容,并且只是Outlet
。将 PopularPosts
组件移动到索引路由中。
const Home = () => {
return (
<>
<div>content</div>
<div>content</div>
<div className="home-posts-container">
<Outlet />
</div>
<div>content</div>
</>
);
};
...
<Routes>
<Route element={!token ? <Navigate replace to="/login" /> : <Navbar />}>
<Route path="/" element={<Home />}>
<Route index element={<PopularPosts />} />
<Route path="/popular" element={<Popular />} />
<Route path="/posts/:postId" element={<PostPage />} />
</Route>
</Route>
</Routes>
有关详细信息,请参阅: