React 父子组件传值

时间:2022-07-05 22:04:53
/*

React中的组件: 解决html 标签构建应用的不足。         


使用组件的好处:把公共的功能单独抽离成一个文件作为一个组件,哪里里使用哪里引入。


父子组件:组件的相互调用中,我们把调用者称为父组件,被调用者称为子组件


父子组件传值(react 父子组件通信):

    父组件给子组件传值 

            1.在调用子组件的时候定义一个属性  <Header msg='首页'></Header>

              2.子组件里面 this.props.msg          


        说明:父组件不仅可以给子组件传值,还可以给子组件传方法,以及把整个父组件传给子组件,可以让子组件给父组件传值。


    父组件主动获取子组件的数据

        1、调用子组件的时候指定ref的值 <Header ref='header'></Header>      
        
        2、通过this.refs.header  获取整个子组件实例  (dom(组件)加载完成以后获取 )



*/


import React, { Component } from 'react';

import Header from './Header';

import '../assets/css/index.css';

class Home extends Component {

    constructor(props){
        super(props);        
        this.state={ 
          title:'首页组件',
          count:20
        }
    }
    render() {
      return (
        <div>                  

            {/* <Header title={this.state.title}  /> */}


             {/* <Header/>  */}


              {/* <Header title={this.state.title} num='aaaaaaaaaaaaa' />  */}


              <Header title={this.state.title} num={this.state.count} />
          <br />

          <hr />

            <br />

            这是首页组件的内容
            
       
        </div>
      );
    }
  }
  
  export default Home;
  

 

import React, { Component } from 'react';


/*
父组件给子组件传值:


    defaultProps:父子组件传值中,如果父组件调用子组件的时候不给子组件传值,可以在子组件中使用defaultProps定义的默认值

    propTypes:验证父组件传值的类型合法性

            1、引入import PropTypes from 'prop-types';

            2、类.propTypes = {
                name: PropTypes.string
            };


    都是定义在子组件里面


https://reactjs.org/docs/typechecking-with-proptypes.html


*/




import PropTypes from 'prop-types';


class Header extends Component {
    constructor(props) {
        super(props);
        this.state = { 

            msg:"我是一个头部组件"
         };
    }
    render() {
        return (
            <div>
                <h2>---{this.props.title}--- {this.props.num}</h2>
            </div>
        );
    }
}

//defaultProps   如果父组件调用子组件的时候不给子组件传值,可以在子组件中使用defaultProps定义的默认值
Header.defaultProps={

    title:'标题'
}

//同行propTypes定义父组件给子组件传值的类型

Header.propTypes={

    num:PropTypes.number
}


export default Header;