如何在 React 中使用 HashRouter 处理动态路由?
How to handle dynamic routes with HashRouter in React?
我正在使用哈希路由器,我想支持动态路径(即:/user/:id
)。
我的做法是:
<HashRouter>
<Routes>
<Route index element={<App />} />
<Route path="/user/:id" component={User}/>
</Routes>
</HashRouter>
我也试过使用 render
:
<Route path="/user/:id" render={(props) => <User {...props} />}/>
但似乎没有任何效果。
执行此操作的正确方法是什么?
您仍然会使用 element
道具。所有 Route
组件将其路由内容呈现在 element
道具上作为 JSX,即 ReactElement
.
<Route path="/user/:id" element={<User />} />
我猜你的下一个问题可能是“如何访问 id
路由匹配参数?”
为此,请使用 User
组件中的 useParams
挂钩。
import { useParams } from 'react-router-dom';
...
const { id } = useParams();
如果 User
是一个 class 组件并且不能使用 React 钩子,那么创建一个包装器组件,可以将参数作为 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 />} />
我正在使用哈希路由器,我想支持动态路径(即:/user/:id
)。
我的做法是:
<HashRouter>
<Routes>
<Route index element={<App />} />
<Route path="/user/:id" component={User}/>
</Routes>
</HashRouter>
我也试过使用 render
:
<Route path="/user/:id" render={(props) => <User {...props} />}/>
但似乎没有任何效果。
执行此操作的正确方法是什么?
您仍然会使用 element
道具。所有 Route
组件将其路由内容呈现在 element
道具上作为 JSX,即 ReactElement
.
<Route path="/user/:id" element={<User />} />
我猜你的下一个问题可能是“如何访问 id
路由匹配参数?”
为此,请使用 User
组件中的 useParams
挂钩。
import { useParams } from 'react-router-dom';
...
const { id } = useParams();
如果 User
是一个 class 组件并且不能使用 React 钩子,那么创建一个包装器组件,可以将参数作为 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 />} />