reactjs - 是否可以将参数从 React Route 标签传递到 Navigate 标签?

标签 reactjs react-router react-router-dom

内容如下。

<Route path="/:id" >
    <Navigate
      to="/intro?Id=:id"
    />
  </Route>

有没有办法将 :id 参数传递给 Route 标签,就像将 :id 参数传递给 Navigate 标签一样?

最佳答案

好的,我明白了,所以您实际上想要渲染从“/:id”到“intro?Id=:id”的重定向。

您不能只从一个路径重定向到另一个路径,因为您动态使用 id 路由匹配参数作为查询字符串参数的一部分,并且由于 react-router-dom 不处理您自己处理此映射所需的 URL 查询字符串。我花了一些时间仔细研究版本 6 文档,但这就是我得出的结论:

  1. 创建自定义组件来读取匹配参数并呈现 Navigate 组件。

    const IntroRedirect = () => {
      const { id } = useParams();
      return <Navigate replace to={`/intro?Id=${id}`} /> 
    };
    
  2. Route 上渲染 MyNavigate

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

Edit is-it-possible-to-pass-parameters-from-react-route-tag-to-navigate-tag

完整演示代码:

import {
  BrowserRouter as Router,
  Link,
  Routes,
  Route,
  Navigate,
  useLocation,
  useParams
} from "react-router-dom";

const IntroRedirect = () => {
  const { id } = useParams();
  return <Navigate replace to={`/intro?Id=${id}`} />;
};

const Intro = () => {
  const { search } = useLocation();
  const query = new URLSearchParams(search);
  const Id = query.get("Id");

  return <div>Intro: Id="{Id}"</div>;
};

export default function App() {
  return (
    <div className="App">
      <h1>Hello CodeSandbox</h1>
      <h2>Start editing to see some magic happen!</h2>

      <Router>
        <ul>
          <li>
            <Link to="/">Home</Link>
          </li>
          <li>
            <Link to="/1234">"/1234"</Link>
          </li>
          <li>
            <Link to="/4567">"/4567"</Link>
          </li>
          <li>
            <Link to="/7890">"/7890"</Link>
          </li>
        </ul>
        <Routes>
          <Route path="/intro" element={<Intro />} />
          <Route path="/:id" element={<IntroRedirect />} />
        </Routes>
      </Router>
    </div>
  );
}

关于reactjs - 是否可以将参数从 React Route 标签传递到 Navigate 标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68645594/

相关文章:

reactjs - 如何在immutablejs中迭代Map

reactjs - 如何强制react-router-v6 路由上存在searchParams?

html - react-router browserHistory 在 Apache 服务器上不起作用

javascript - React-router v4,URL 更改但组件不呈现

reactjs - React 路由器或链接未渲染

javascript - Protractor :非 Angular 应用程序中的多个浏览器实例:ignoreSynchronization 不起作用

javascript - 使用 es2015 map 获取索引失败

javascript - React 中的嵌套路由无法使用 React-router v4 正确渲染

reactjs - React - 违反不变性 : Maximum update depth exceeded

javascript - React.js 在导航离开页面或页面刷新时触发事件