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

Fro*_*619 3 javascript reactjs react-router react-router-dom

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

<Route path="user" element={<UserScreen />}>
  <Route path=":id/makeYear?" element={<User/>} />
</Route>
Run Code Online (Sandbox Code Playgroud)

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

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

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

Dre*_*ese 10

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

<Route path=":id" element={<User/>} />
Run Code Online (Sandbox Code Playgroud)

...

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

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

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

  ...
};
Run Code Online (Sandbox Code Playgroud)