反应路由器混乱

Jac*_*ack 11 javascript ecmascript-6 reactjs react-router

新的反应和反应路由器.

我试图理解这个例子:

https://github.com/ReactTraining/react-router/blob/1.0.x/docs/API.md#components-1

但是this.props从不包含main或sidebar.我的代码:

Main.js

ReactDOM.render(
    <Router>
      <Route path="/" component={App2}>
        <Route path="/" components={{main: Home, sidebar: HomeSidebar}}/>

      </Route>
    </Router>,
  document.getElementById('content')
);
Run Code Online (Sandbox Code Playgroud)

App2.js

class App2 extends React.Component {
  render() {
    const {main, sidebar} = this.props;
    return (
        <div>
          <Menu inverted vertical fixed="left">
            {sidebar}
          </Menu>
          <Container className="main-container">
            {main}
          </Container>
        </div>
    );
  }
}

export default App2;
Run Code Online (Sandbox Code Playgroud)

Home.js

import React from 'react';

class Home extends React.Component {

  render() {
    return (
      <div><h1>Home</h1></div>
    );
  }

}

export default Home;
Run Code Online (Sandbox Code Playgroud)

HomeSidebar.js

class HomeSidebar extends React.Component {
  render() {
    return (
      <div>
        <p>I'm a sidebar</p>
      </div>

    );
  }
}

export default HomeSidebar;
Run Code Online (Sandbox Code Playgroud)

我正在使用带有react dev工具的电子.每当我调试时,this.props既不包含main也不包含侧边栏.知道为什么会这样吗?

我也试过使用IndexRoute,但它似乎不支持组件道具.

我试过的其他事情

ReactDOM.render(
    <Router>
      <Route component={App2}>
        <Route path="/" components={{main: Home, sidebar: HomeSidebar}}/>
      </Route>
    </Router>,
  document.getElementById('content')
);

ReactDOM.render(
    <Router>
      <Route path="/" component={App2} components={{main: Home, sidebar: HomeSidebar}}>
        <Route path="admin" components={{main: Admin, sidebar: AdminSidebar}}/>
      </Route>
    </Router>,
  document.getElementById('content')
);
Run Code Online (Sandbox Code Playgroud)

Jam*_*ong 2

如果您使用的是当前版本的react-router(v4.0.0),看起来他们取消了路由上的组件道具: https: //reacttraining.com/react-router/web/api/Route

您可以在任何地方渲染路线,他们甚至有一个侧边栏示例来实现这一点。他们有一组路由组件来渲染主要组件,另一组路由组件用于侧边栏,但两者都来自单个路由配置以保持干燥。

要将其转换为您的代码,您可以创建一个路由配置:

const routes = [
  { path: '/',
    sidebar: Sidebar
    main: Main
  }
];
Run Code Online (Sandbox Code Playgroud)

然后在Main.js中

ReactDOM.render(
    <Router>
      <Route component={App2}>
        {routes.map((route, index) => (
          <Route
            key={index}
            path={route.path}
            component={route.main}
          />
        ))}
      </Route>
    </Router>,
  document.getElementById('content')
);
Run Code Online (Sandbox Code Playgroud)

然后在App2.js中

class App2 extends React.Component {
  render() {
    return (
        <div>
          <Menu inverted vertical fixed="left">
            {routes.map((route, index) => (
              <Route
                key={index}
                path={route.path}
                component={route.sidebar}
              />
            ))}
          </Menu>
          <Container className="main-container">
            {this.props.children}
          </Container>
        </div>
    );
  }
}

export default App2;
Run Code Online (Sandbox Code Playgroud)