react父子组件相互传值

2017-01-22  本文已影响3335人  夜幕小草

1、父组件------>子组件
通过父组件设置(state) --------->子组件 (this.props.show)

子组件

 <ModeView modeName="增 加1" contentName={contentName} show={this.state.showSubDlg} modeOff={this.rmvShow}

2、子组件 (someFn)------->父组件 (fn)
通过设置子组件的props ,然后父组件通过props传到fn

  someFn(curRowData) {
    this.props.pfn(curRowData); // 传给父组件了
  }
(<tr key={index} onClick={ () => {
          {/*alert("你好。2017.1.21----" + index );*/}
          //------------------------------获取一行数据---------------------------------
          curRowData = FeildData[index];
          this.someFn(curRowData);
          
          this.setState({
            curRowData:curRowData,
          },
            () =>{
              console.log("-----------------this1111.curRowData-----------------------");
              console.log(this.state.curRowData);
            }
          );
          console.log("-----------------curRowData-----------------------");
          console.log(curRowData);

        }
          
        } style={{ cursor: 'pointer' }}>
          {cells}
        </tr>);

父组件

  fn = (newState) => {
    this.setState(
      {
      someKey: newState },
      () => {
        console.log("---------龙哥-----------");
        console.log(this.state.someKey);
      }
    );
  }
<TableView key="TableViewHeader" pfn={this.fn} />

---------------------------------setState后边可以带一个函数------------------------------

         this.setState({
            curRowData:curRowData,
          },
            () =>{
              console.log("-----------------this1111.curRowData-----------------------");
              console.log(this.state.curRowData);
            }
          );
 //获取当前选中的一行数据
  // getCurRowData = (dataArr,dataCb) => {
  //   this.setState(
  //     {
  //       curRowData: dataArr,
  //     },
  //     dataCb()
  //   )
  // }

总结: 子组件传值给父组件
思想是回调函数:
也就是在父组件中,设置一个函数,这个函数就是操作回调的数据

<TableView key="TableViewHeader" pfn={this.fn} />
  //------------------接收子组件返回的修改页面数据---------------------
  fn = (curRowAllShowData,curRowAllData) => {
    this.setState(
      {
      xiuGaiShowData: curRowAllShowData ,
      xiuGaiRowAllData :curRowAllData ,
      },
    );
  }

子组件

(<tr key={index} onClick={ () => {
        //------------------------------获取一行数据---------------------------------
          curRowAllData = FeildData[index];
          curRowAllShowData = allShowData[index];
          {/*this.someFn(curRowAllShowData,curRowAllData);*/}
          this.props.pfn(curRowAllShowData,curRowAllData);
        }
        } style={{ cursor: 'pointer' }}>
          {cells}
        </tr>);
上一篇下一篇

猜你喜欢

热点阅读