React-StepPitGuide
  • 封面
  • 前言
  • 基础知识
    • 环境配置
      • WebPack 前端打包工具
      • Babel 编译器
      • Node 环境配置
    • 版本说明
    • JSX
    • 组件
    • Child组件
    • 多组件嵌套
    • 组件生命周期
      • 组件生命周期(React16之前)
    • State属性
    • Props属性
    • 类组件
      • React PropTypes
      • React 可复用组件
      • React 事件与数据的双向绑定
      • React 组件DOM操作
      • React 独立组件间共享 Mixins ⚠
      • React 高阶组件(HOC)
        • 继承方式的高阶组件
        • 代理方式的高阶组件
      • React 无状态组件与PureComponent
      • React 容器组件和展示组件
      • setState
    • 函数组件
      • React 函数子组件
      • React Hook
        • useState
        • useEffect
    • 组件样式
      • CSS內联式样
      • CSS模块化
    • 受控与非受控组件
  • 进阶知识
  • React Context
  • React 顶级API
  • React Portal 传送门
  • 应用知识
    • 路由
      • React-Router2
      • React-router4
        • React-router4 结合React-Redux
    • 服务端渲染
    • 性能优化
      • React 组件优化
        • 定制shouldComponentUpdate
        • PureComponent
        • immutablejs存在的意义和使用
      • Redux性能优化
      • React同构
    • 项目应用
      • React 文件组织方式
      • React 模块接口
      • React 合并reducer
      • React 问题
  • 状态管理
    • Flux
    • Redux
      • Redux 使用
      • Redux 异步
      • Redux Chrome插件使用
      • Redux React-Redux
      • Redux applyMiddleware
      • Redux 结合React
      • Redux 自制Redux
      • Redux 自制React-Redux
      • Redux 自制thunk中间件
      • Redux 自制arr中间件
    • Mobx
      • Mobx 思想
    • RXJS
    • immutable
  • 源码思考
    • 简述
    • SimpleReact
    • 虚拟DOM
      • 虚拟DOM概念(React 16前)
      • 虚拟DOM思考(React 16前)
    • 生命周期
    • 事件
    • Fiber
      • 数据结构
      • Scheduler 调度
      • Concurrent 异步渲染
    • Hooks
      • useState
由 GitBook 提供支持
在本页

这有帮助吗?

  1. 基础知识

Child组件

我们先来看一个例子

import React from 'react';
import Main from './Main';
import Child from './Child';

class App extends React.Component {
  render() {
    return (
      <div className="App">
       <Main id='4'>
        {(files)=>files?<Child files={files}></Child>:<div>等待中!!!</div>}
       </Main>
      </div>
    );
  }
}

export default App;

在App组件中,其中Main组件中包含了一个Child组件,这个Child组件就是Main组件的子组件。

接下来我们看看Main和Child中写了些什么

  • 组件Main

import React from 'react';

class Main extends React.Component {
  constructor(props) {
    super(props)
    this.state = {
      files:''
    }
  }
  componentDidMount(){
    const title = this.props.id
    this.setState({files:title})
  }
  render(){
    const children = this.props.children(this.state.files)
    return(
      <div>{children}</div>
    )
  }
}

export default Main
  • 组件Child

import React from 'react';

class Child extends React.Component {
  constructor(props) {
    super(props)
    }
  render(){
    return(
      <div>
       {this.props.files}
       <div>Child</div>
      </div>
    )
  }
}

export default Child

在这里我通过React的组件Child,来进行操作。可以通过this.props.children来得到父组件Main之下的子组件Child

在App组件中通过props传递给Main组件一个名为id的参数,使用?:进行一个判断如果,files值有传递那就渲染Child,如果没有那就渲染等待中组件

<div className="App">
  <Main id='4'>
    {(files)=>files?<Child files={files}></Child>:<div>等待中!!!</div>}
  </Main>
</div>

在Main中接受props传递过来的props。通过处理props,改变state,从而改变传递给子组件的state

componentDidMount(){
 const title = this.props.id
 this.setState({files:title})
}
render(){
 const children = this.props.children(this.state.files)
 return(
 <div>{children}</div>
 )
}

关键的问题是获取子组件,所以就引出了最重要的一环this.props.children

这里的this.props.children(this.state.files)只是获取子组件,而且子组件也不会自动渲染,需要在父组件中渲染一次,所以要return(<div>{children}</div>),这样才能真正渲染出子组件。

this.props.children

我们来看看在Main组件中我们能通过this.props.children获取什么。

上一页组件下一页多组件嵌套

最后更新于4年前

这有帮助吗?

它获取到了整个三目运算符判断后的结果为<div>等待中!!!</div>,因为此时还没有进行setState,在经过setState后它就变成了<Child files={files}></Child>,这样就可以渲染Main的子组件。如下图