reactjs - 如何在 React 中使用 HashRouter 处理动态路由?

标签 reactjs react-router-dom

我正在使用 hashrouter,并且我想支持动态路径(即:/user/:id)。

我的做法是:

<HashRouter>
    <Routes>
        <Route index element={<App />} />
        <Route path="/user/:id" component={User}/>
    </Routes>
</HashRouter>

我还尝试使用渲染:

<Route path="/user/:id" render={(props) => <User {...props} />}/>

但似乎没有任何作用。

执行此操作的正确方法是什么?

最佳答案

您仍然需要使用 element 属性。所有 Route 组件在 element 属性上将其路由内容渲染为 JSX,即 ReactElement

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

我猜您的下一个问题可能是“如何访问 id 路由匹配参数?”

为此,请使用 User 组件中的 useParams Hook 。

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

...

const { id } = useParams();

如果 User 是一个类组件并且无法使用 React hooks,则创建一个包装器组件,该组件可以将参数作为 prop 传入。

const UserWrapper = () => {
  const match = useMatch(); // i.e. match.params

  return <User match={match} /> // i.e. this.props.match.params
}

...

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

关于reactjs - 如何在 React 中使用 HashRouter 处理动态路由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70768179/

相关文章:

node.js - 每次安装软件包时都必须重新安装 node_modules

reactjs - Material UI 链接按钮与 MUI 的样式组件 api

react-router - react 路由器 Prop `location`/ `match` 未更新为 `ConnectedRouter`

reactjs - 将 history.block 与异步函数/回调/异步/等待一起使用

css - 如何直接从表 td 访问按钮

javascript - 状态不会第一次改变

javascript - 如何使用 Facebook Login 和 ReactJS 实现登录和注销?

asp.net-mvc - 如何在ReactJs中使用路由?

reactjs - 使用 react-router-dom v4/v5 组合侧边栏和嵌套路由

javascript - React Router v6 中嵌套在路由内部时组件丢失