鍍金池/ 問(wèn)答/HTML5  HTML/ react router this.props.children渲染問(wèn)題

react router this.props.children渲染問(wèn)題

使用react-router-dom的route標(biāo)簽的render方法,組件里使用this.props.children渲染不出來(lái)

相關(guān)環(huán)境 react16

相關(guān)代碼

index.js

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';

ReactDOM.render(<App />, document.getElementById('root'));

app.js

import React, { Component } from 'react';
import MyLayout from './components/Layout/Layout';
import { BrowserRouter as Router, Switch, Route } from 'react-router-dom';
import 'antd/dist/antd.css';

import Login from './page/Login/Login';
import Home from './page/Home/Home';
import ArticleList from './page/ArticleList/ArticleList';
import NewArticle from './page/NewArticle/NewArticle';


class App extends Component {
  render() {
    let LayoutRouter = (
      <MyLayout>
        <Switch>
          <Route exact path="/" Component={Home} />
          <Route path="/article/list" Component={ArticleList} />
          <Route path="/article/new" Component={NewArticle} />
        </Switch>
      </MyLayout>
    );
    return (
      <Router>
        <Switch>
          <Route path="/login" Component={Login} />
          <Route path="/" render={ props => LayoutRouter } />
        </Switch>
      </Router>
    )
  }
};

export default App;

MyLayout組件

import React, { Component } from 'react';
import { Layout } from 'antd';
import SideNav from '../SideNav/SideNav';
import TopNav from '../TopNav/TopNav';

const { Content } = Layout;

class MyLayout extends Component {
  render() {
    console.log(this.props.children);
    return (
      <Layout className="myLayout">
        <SideNav />
        <Layout>
          <TopNav />
          <Content style={{margin: '0 16px'}} >
            內(nèi)容
            {this.props.children}
          </Content>
        </Layout>
      </Layout>
    )
  }
}

export default MyLayout;

Home.js

import React, { Component } from 'react';

class Home extends Component {
  render() {
    return <div>首頁(yè)</div>
  }
}

export default Home;

運(yùn)行之后的結(jié)果

clipboard.png

clipboard.png

其中"內(nèi)容"兩個(gè)字渲染出來(lái)了,但是this.props.children沒(méi)有渲染出來(lái),也沒(méi)有報(bào)錯(cuò)

回答
編輯回答
近義詞

你Route上的component應(yīng)該小寫(xiě)吧?
嵌套路由也用component,代碼如下:

<Router>
    <Switch>
      <Route exact path="/" component={LayoutRouter} />
    </Switch>
</Router>
const LayoutRouter = (props) => {
      return (
        <MyLayout>
          <Router history={props.history}>
            <Switch>
              <Route path="/" component={Home} />
            </Switch>
          </Router>
        </MyLayout>
      )
    }
2017年8月31日 04:37