react router this.props.children渲染问题

发布于 2022-09-07 21:52:36 字数 2491 浏览 15 评论 0

使用react-router-dom的route标签的render方法,组件里使用this.props.children渲染不出来

相关环境 react16

相关代码

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'}} >
            内容
            {this.props.children}
          </Content>
        </Layout>
      </Layout>
    )
  }
}

export default MyLayout;

Home.js

import React, { Component } from 'react';

class Home extends Component {
  render() {
    return <div>首页</div>
  }
}

export default Home;

运行之后的结果

clipboard.png

clipboard.png

其中"内容"两个字渲染出来了,但是this.props.children没有渲染出来,也没有报错

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

你的呼吸 2022-09-14 21:52:36

你Route上的component应该小写吧?
嵌套路由也用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>
      )
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文