基于ReactRouter路径的条件加载组件

时间:2018-01-01 20:19:07

标签: javascript reactjs react-router

我使用了React-Router,编码了这个



<Router>
  <div className="app">
    <div className="wrapper">
      <AppHeaderMain />
      <Switch>
        <Route exact path="/" component={Home} />
        <Route path="/list/" component={List} />
        <Route path="/about/" component={About} />
        <Route component={NotFound} />
      </Switch>
      <div className="menu">
        <ul>
          <li><NavLink exact to="/">List</NavLink></li>
          <li><NavLink to="/about/">About</NavLink></li>
        </ul>
      </div>
    </div>
  </div>
</Router>
&#13;
&#13;
&#13;

我有一个问题,是否可以根据Rout路径加载另一个组件,例如:

&#13;
&#13;
path="/" - load <AppHeaderMain />
path="/list/" - load <AppHeaderSubpage />
&#13;
&#13;
&#13;

我知道我可以将AppHeader组件插入到每个组件中,但我不想重复一些额外的代码来实现这一点。 我的意思是条件包括(加载)组件。 这是一个好习惯吗?也许我必须完全按照我写的方式编写:包含在每个单独的组件中?

1 个答案:

答案 0 :(得分:2)

我认为这是一个构成问题。为什么不创建工厂功能。例如:

function routeHandlerWithAppHeader(Component) {
  return (props) => (
    <div>
      <AppHeaderMain />
      <Component {...props}/>
    </div>;
  );
}

然后使用:

<Route exact path="/" component={routeHandlerWithAppHeader(Home)} />