如何在 react-route-dom v6 中处理 Route 404 页面,例如“/search/:searchText”

function App() {
  return (
    <RecoilRoot>
      <Router>
        <Navbar />
        <Routes>
          <Route path={"/"} element={<Home />} />
          <Route path={`/page/:menu`} element={<MovieMenu />} />
          <Route path={`/movie/:id`} element={<Detail />} />
          <Route path={`/search/:searchText`} element={<Search />} />
          <Route path={"*"} element={<NotFound />} />
        </Routes>
      </Router>
    </RecoilRoot>
  );
}

如果我按照上面的方式处理404页面,/处理好,但是如果在or<NotFound />之后输入任何路径就不会被渲染有办法吗?/page/fldlfsd;lf;/search/dsklfskldf

德鲁里斯

"/page/fldlfsd;lf;"类似和的路径"/search/dsklfskldf"将由Routes组件匹配和渲染。路由参数验证需要在路由组件中进行。

每个组件都可以使用useParams钩子访问路由参数,对其进行验证,NotFound如果参数无效,则重定向到路由。

为了解决这个问题,我建议创建一个离散的渲染路径,NotFound这样你就可以从组件强制重定向到它,并创建一个重定向路由来处理未知的路由。

例子:

function App() {
  return (
    <RecoilRoot>
      <Router>
        <Navbar />
        <Routes>
          <Route path="/" element={<Home />} />
          <Route path="/page/:menu" element={<MovieMenu />} />
          <Route path="/movie/:id" element={<Detail />} />
          <Route path="/search/:searchText" element={<Search />} />
          <Route path="/404" element={<NotFound />} />
          <Route path="*" element={<Navigate to="/404" replace />} />
        </Routes>
      </Router>
    </RecoilRoot>
  );
}

...

电影菜单

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

useEffect(() => {
  ... logic to validate menu param ...
  if (invalidMenu) {
    navigate("/404", { replace: true });
  }
}, [menu, navigate]);

...

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

React 嵌套路由 react-route-dom v6

如何在 react-router-dom v6 的活动 NavLink 中显示不同的图标?

关于 Route v6 (privateroute) 中的反应错误

如何導航到 React Router Dom V6 中的嵌套路由

如何在react-router-dom v6中返回上一条路由

如何使用 Typescript 从 react-router-dom 访问路由参数?例如:`/some-route/:slug`

React Router Dom v6 中的重定向

React-Router-Dom v6 中的重定向

如何在 React Router v6 中重定向?

如何在全新的空白页面中呈现React Route组件

如何在React-Router中处理Route内的多个路径

在React Router v6中,如何在离开页面/路由之前检查表单是否脏

如何在课堂上从 react-router-dom v6 获取参数值

如何在React Router v4中的<Route />之外访问历史对象

如何使用对象而不是组件/功能从react-route-dom渲染<Route />

如何在 React 中通过 Route 传递 props 到组件

react-router-dom v6 在当前页面上渲染新页面

在 React js react-router-dom V6 中實現嵌套路由

React Router Dom v6 检测用户离开页面并做一些事情

如何在Express中处理“无法<METHOD> <ROUTE>”?

如何将组件名称从另一个组件的对象传递到React Router Dom中的Route?

我如何将其升级到 react-router-dom v6

在 react-router-dom v6 中的 history.replace

react-router-dom V6 中的嵌套路由

React Router Dom V6 中的 <Link> 标记未按预期工作

如何在 react-router v6 中的树结构中创建深层路径

如何使用react-route在处理程序中获取路由名称?

使用react-router-dom(<Route>)将var从->传递到React中的功能组件

如何在React Native中的react选项卡导航中设置默认屏幕Route