Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 反应路由器v4参数和面包屑成分_Reactjs_React Router_React Router V4 - Fatal编程技术网

Reactjs 反应路由器v4参数和面包屑成分

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

React路由器的工作原理如下:

<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=>(
}
/>
))}
);
}
}

这会将上下文匹配传递到面包屑组件。

这样做有效吗?只适用于一条路线不幸的是,我真的需要所有路线。