如何为不存在的路由编写 React Router v6 的 Not found 页面?

IT技术 reactjs react-router react-router-dom
2022-07-31 01:50:27
<Routes>
  <Route path="/404" element={<NotFound />} />
  <Route path="/" element={<Home />} />
  <Route path=":category" element={<Products />} />
  <Route path='*' element={<NotFound />} />
</Routes>

这是我尝试过的代码,它正在渲染 path="/404" 但不是 path="*"。谁能帮我解决这个问题?我寻找答案,但我无法解决这个问题。

1个回答

我没有看到路由代码本身有任何问题,但我怀疑在这种情况下,它<Route path=":category" element={<Products />}/>正在匹配其中一些无关的路由并被渲染。例如,任何具有单个路径段的 URL,即"/foo""/bar",都将作为类别进行匹配。如果是这种情况,那么您需要验证category路由参数并有条件地重定向到"/404"路由。任何完全匹配的路由仍应与该"*"路由匹配。

例子:

const navigate = useNavigate();
const { category } = useParams();

useEffect(() => {
  if (/* condition check for category */) {
    navigate("/404", { replace: true });
  }
}, [category]);