zoukankan      html  css  js  c++  java
  • 【React】react学习笔记06-React多组件父子传值

    前文讲到,React是面向组件来开发的,那么组件之间是怎样配合的呢?

     父组件传参子组件:

    下面我定义了两个组件,上层组件为Component,子组件为SubComponent。父组件调用子组件的时候,通过props属性传递了两个参数,分别为:times以及clickEvent

    <div>
      <p>=========将父组件中的state值与函数传递给子组件========</p>
      <SubComponent times={times} clickEvent={this.clickBtn.bind(this)}/>
      <p>=================================================</p>
    </div>

      

    子组件接收参数并使用:

    父组件变量的接收使用:

    //从props中取值
    const times = this.props.times;

    父组件函数的使用:

     //实际上调用的是传参进来的函数
    this.props.clickEvent();

    DEMO:

    仍旧是复制代码看效果:

    <!DOCTYPE html><html>
    <head>
        <meta charset="utf-8" />
        <title>React Tutorial</title>
    
    </head>
    <body>
        <!--react基础库-->
        <script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.3/react.js"></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.3/react-dom.js"></script>
        <!--bable转换库,ES语法以及Jax语法的转换-->
        <script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.23/browser.min.js"></script>
    
        <div id="content"></div>
    
        <script type="text/babel">
            //定义父组件
            class Component extends React.Component{
                //构造函数,在初始化组件的时候会执行
                  constructor(props){
                      super(props);
                      this.state={
                          times: 1
                      }
                  }
                //render会进行页面的渲染,当state中数据更新或者发送ajax等事件被监听到都会触发render的刷新
                  render(){
                      //从state中取值
                      const times = this.state.times;
                      // 绑定onClick事件函数
                      return(
                          <div>
                              <p>=========将父组件中的state值与函数传递给子组件========</p>
                              <SubComponent times={times} clickEvent={this.clickBtn.bind(this)}/>
                              <p>=================================================</p>
                          </div>
                      );
                  };
                  clickBtn(){
                        //console.log("click")
                        let times=this.state.times;
                        times+=1;
                        this.setState({times});
                 }
            }
            //定义子组件
            class SubComponent extends React.Component{
                //构造函数,仅在初始化组件的时候会执行一次
                constructor(props){
                    super(props);
                    this.state={times: this.props.times}
                }
    
                render(){
                    //从props中取值
                    const times = this.props.times;
                    // 绑定onClick事件函数
                    return(
                        <div>
                            <p>次数:{times}</p>
                            <button onClick={this.clickSubBtn.bind(this)} >Click</button>
                        </div>
                    );
                }
                clickSubBtn(){
                    //实际上调用的是传参进来的函数
                    this.props.clickEvent();
                }
            }
            ReactDOM.render(<Component />,document.getElementById("content"));
    
    
        </script>
    
    
    </body>
    </html>

      

    DEMO的结果是:统计点击次数。

    注意事项:

    1、React只支持从上往下的参数传递。

    2、不要建立太过复杂的上下结构,一般建议2-3层。

  • 相关阅读:
    POJ 3278 Catch That Cow
    Object-C 函数定义 -- 笔记
    Object-C变量作用域 -- 笔记
    Object-C 对象 (创建/销毁 对象)-- 笔记
    Object-C 类定义 -- 笔记
    JavaScript 自动分页插件 datatables
    JavaScript 随机数函数
    Server Job: error: String or binary data would be truncated. The statement has been terminated.
    SQL Server error "Xml data type is not supported in distributed queries" and workaround for it
    angularJS怎么实现与服务端的PHP进行数据交互
  • 原文地址:https://www.cnblogs.com/the-fool/p/11152648.html
Copyright © 2011-2022 走看看