reactjs - 使用 React Router 将可选查询参数添加到动态路径

标签 reactjs react-router

我正在尝试将可选的查询参数添加到路径的末尾,因此 URL 看起来像这样:/user/1/cars?makeYear=2020/user/1/cars .相关 Route 定义如下。我找不到有关如何将可选查询参数添加到现有路径的指南。例如,以下内容不起作用:


<Route path="user" element={<UserScreen />}>
  <Route path=":id/makeYear?" element={<User/>} />
</Route>

在这里我认为 <Route path=":id/makeYear?" element={<User/>} />将标记makeYear作为可选参数,但不,不起作用。

然后我想我应该直接在组件中访问查询参数,所以假设 URL 是 /user/1/cars?makeYear=2020 ,我可以通过 useLocation 获取 URL由 react-router 提供的 api。但是,查询参数也不起作用,因为查询参数会立即从 URL 中删除(我猜是通过 react-router...)。

我正在使用 react-router-dom (6.2.2)

最佳答案

react-router-dom 不使用 queryString 进行路由路径匹配。从路由 path 属性中删除 queryString 部分。通过 useSearchParams 访问组件中的查询参数钩子(Hook)。

<Route path=":id" element={<User/>} />

...

import { useSearchParams } from 'react-router-dom';

const User = () => {
  const [searchParams] = useSearchParams();

  const makeYear = searchParams.get("makeYear");
  // handle logic based on makeYear

  ...
};

关于reactjs - 使用 React Router 将可选查询参数添加到动态路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73327602/

相关文章:

javascript - 如何基于路由在组件内部渲染组件

reactjs - 使用react-router-redux,如何以编程方式重定向到URL

reactjs - 如何限制reactjs useContext仅用于react-router的某些路由

react-router - 使用 React Loadable 和 React Router 基于路由预取?

javascript - 在 React : moment__WEBPACK_IMPORTED_MODULE_2__format is not a function? 中使用 NPM Moment.js 时出现问题

javascript - Web3 1.1.0 的问题

reactjs - React (Native) Context API 导致 Stack Navigator (React Navigation 5) 在状态更新后重新渲染

javascript - 如何在 react-highcharts 中使用图表工具提示格式化程序?

javascript - history.listen 在 React Router 中无法正常工作

reactjs - React router + webpack,子路由不起作用