我有一个React前端。代码如下。我的问题是我需要在导航菜单中的<Routes>
之外获取路由信息,而我不能使用useParams()
。另一方面,我试图将<Routes>
移动到<NavMenu>
之外,但我得到一个错误:
Error: [default] is not a <Route> component. All component children of <Routes> must be a <Route> or <React.Fragment>
字符串
在React 18之前,我可以使用this.props.location.pathname.split...
,但即使这样也是一种解决方案。而且withRouter
在react-router-dom@6
中不再可用。
代码,非常简单:
index.tsx
ReactDOM.createRoot(document.getElementById('react-hook'))
.render(
<Provider store={store}>
<BrowserRouter>
<App />
</BrowserRouter>
</Provider>
);
型
app.tsx
export default () => (
<Layout>
<Routes>
<Route path='/:auxParam/site/foo/:startIndex?' Component={Extra} />
</Routes>
</Layout>
);
型
layout.tsx
export default (props: { children?: React.ReactNode }) => (
<React.Fragment>
<NavMenu />
<Container tag="main">
{props.children}
</Container>
</React.Fragment>
);
型
navmenu.tsx
class NavMenu extends React.PureComponent<NavMenuProps, { isOpen: boolean }> {
public render() {
const auxParam: string = ...?...; // how to get it?
return (
<header>
<Navbar>
<Container>
<NavbarBrand tag={Link} to="/">My site (React)</NavbarBrand>
<ul>
<NavItem>
<NavLink tag={Link} to={`/${aux}/site/foo`}>Extra</NavLink>
</NavItem>
</ul>
</Container>
</Navbar>
</header>
);
}
}
export default NavMenu;
型
2条答案
按热度按时间6tdlim6h1#
将
Layout
更新为布局布线组件,例如,它渲染Outlet
组件而不是children
属性。范例:
Layout.tsx
字符串
App.tsx
在
element
prop上渲染Extra
。Component
prop仅在数据路由器中有用。型
NavMenu.tsx
将此组件转换为React函数组件,以便它可以使用
useParams
钩子。型
sd2nnvve2#
我不知道我是否理解你的问题,但我想分享这个作为我的答案。
字符串
或者我为你准备了另一个解决方案。
型