Reactjs 反应路由器v4参数和面包屑成分
React路由器的工作原理如下:Reactjs 反应路由器v4参数和面包屑成分,reactjs,react-router,react-router-v4,Reactjs,React Router,React Router V4,React路由器的工作原理如下: <BrowserRouter> {/* the root router creates an "empty" match, so match.params = {} */} <Route path='/album/:albumID' component={Album}> {/* match.params = { albumID: '123' } */} <Album> {/* match.p
<BrowserRouter>
{/* the root router creates an "empty" match, so match.params = {} */}
<Route path='/album/:albumID' component={Album}>
{/* match.params = { albumID: '123' } */}
<Album>
{/* match.path = '/album/:albumID' */}
<Route path={`${match.path}/song/:songID`} component={Song}>
{/* match.params = { albumID: '123', songID: '456' } */}
<Song>
const routes: RoutePaths[] = [
'/route/one/?:foo',
//etc
];
export class BreadCrumbProxy extends React.Component<RouteComponentProps<any> & DispatchProp<any>> {
render() {
return (
<React.Fragment>
<Switch>
{routes.map(route => (
<Route
key={route.toString()}
exact
path={route}
render={({ match }: RouteComponentProps<any>) => <ApplicationHeader {...match} />}
/>
))}
</Switch>
</React.Fragment>
);
}
}
{/*根路由器创建一个“空”匹配,因此match.params={}*/}
{/*match.params={albumID:'123'}*/}
{/*match.path='/album/:albumID'*/}
{/*match.params={albumID:'123',songID:'456'}*/}
上述路线具有动态参数。参数仅在特定路线中可用
我想创建一个通用的BreadCrumbs
组件,它将在相对路由之外进行渲染
这在react路由器v4中是不可能的,因为参数仅相对于特定路由可用
除了解析处理htis的url之外,似乎没有其他内容
有人找到解决办法了吗
这真的不好。答案是利用React路由器的v4动态路由: 我最后做了这样的事情:
<BrowserRouter>
{/* the root router creates an "empty" match, so match.params = {} */}
<Route path='/album/:albumID' component={Album}>
{/* match.params = { albumID: '123' } */}
<Album>
{/* match.path = '/album/:albumID' */}
<Route path={`${match.path}/song/:songID`} component={Song}>
{/* match.params = { albumID: '123', songID: '456' } */}
<Song>
const routes: RoutePaths[] = [
'/route/one/?:foo',
//etc
];
export class BreadCrumbProxy extends React.Component<RouteComponentProps<any> & DispatchProp<any>> {
render() {
return (
<React.Fragment>
<Switch>
{routes.map(route => (
<Route
key={route.toString()}
exact
path={route}
render={({ match }: RouteComponentProps<any>) => <ApplicationHeader {...match} />}
/>
))}
</Switch>
</React.Fragment>
);
}
}
const routes:routePath[]=[
“/route/one/?:foo”,
//等
];
导出类BreadCrumbProxy扩展React.Component{
render(){
返回(
{routes.map(route=>(
}
/>
))}
);
}
}
这会将上下文匹配传递到面包屑组件。这样做有效吗?只适用于一条路线不幸的是,我真的需要所有路线。