React 父子组件通信的实现方法


Posted in Javascript onDecember 05, 2019

通讯是单向的,数据必须是由一方传到另一方。

1.父组件与子组件间的通信。

在 React 中,父组件可以向子组件通过传 props 的方式,向子组件进行通讯。

父组件 App.js

import React, { Component } from 'react';

import './App.css';

import Child from './child'

class App extends Component {
  constructor(props){
    super(props);
    this.state={
      msg:'父类的消息',
      name:'John',
      age:99
    }
  }

  callback=(msg,name,age)=>{
    // setState方法,修改msg的值,值是由child里面传过来的
    this.setState({msg});
    this.setState({name});
    this.setState({age});
  }

 render() {
  return (
   <div className="App">
    <p> Message:   {this.state.msg}</p>
    <Child callback={this.callback} age={this.state.age} name={this.state.name}></Child>
   </div>
  );
 }
}

export default App;

父组件中,state里面有三个属性,分别是msg,name和age,在子组件child中,如果想拿到父组件里面的属性,就需要通过props传递。

在 <Child></Child> 标签里面添加

name={this.state.name} age={this.state.age}

写成

<Child name={this.state.name} age={this.state.age}></Child>

name和age分别是你要传递的属性。

子组件   Child

import React from "react";

class Child extends React.Component{
  constructor(props){
    super(props);
    this.state={
      name:'Andy',
      age:31,
      msg:"来自子类的消息"
    }
  }

  change=()=>{
    this.props.callback(this.state.msg,this.state.name,this.state.age);
  }

  render(){
    return(
      <div>
        <div>{this.props.name}</div>
        <div>{this.props.age}</div>
        <button onClick={this.change}>点击</button>
      </div>
    )
  }
}

export default Child;

在子组件中,通过 {this.props.name}  {this.props.age}就能拿到父组件里面的数据。

React 父子组件通信的实现方法

呈现在页面上的就是这个样子。

其中 John,99均来自于父组件App.js

2.子组件向父组件通信

子组件向父组件通讯,同样也需要父组件向子组件传递 props 进行通讯,只是父组件传递的,是作用域为父组件自身的函数,子组件调用该函数,将子组件想要传递的信息,作为参数,传递到父组件的作用域中。

上面例子中,在子组件Child中绑定了onClick事件。 调用this.change方法。

注意change函数采用了箭头函数的写法 change=()=>{},目的是为了改变this的指向。使得在函数单独调用的时候,函数内部的this依然指向child组件

如果不使用箭头函数,而是采用普通的写法

change(){
}

则需要在 constructor中绑定this,

this.change=this.change.bind(this)

或者在onClick方法中绑定this,

onClick={this.change=this.change.bind(this)}

在change方法中,通过props发送出去一个方法,比如说叫callback方法,父组件中去接收这个方法,callback={this.callback},然后在自身的callback函数中进行一些列操作。

本例中,函数callback中就是通过调用 setState方法来改变值。

点击按钮后页面显示:

React 父子组件通信的实现方法

可以看到,我们既实现了通过props将父组件里面的数据传递给子组件的效果,也实现了通过子组件按钮点击事件,将子组件里面的数据发送给父组件

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript多种数据类型表格排序代码分析
Sep 11 Javascript
查看图片(前进后退)功能实现js代码
Apr 24 Javascript
jquery easyui中treegrid用法的简单实例
Feb 18 Javascript
javascript实现获取浏览器版本、操作系统类型
Jan 29 Javascript
javascript实现随时变化着的背景颜色
Apr 02 Javascript
页面内容排序插件jSort使用方法
Oct 10 Javascript
谈一谈JS消息机制和事件机制的理解
Apr 14 Javascript
推荐三款日期选择插件(My97DatePicker、jquery.datepicker、Mobiscroll)
Apr 21 jQuery
使用html+js+css 实现页面轮播图效果(实例讲解)
Sep 21 Javascript
利用Vue2.x开发实现JSON树的方法
Jan 04 Javascript
解决layer.confirm快速点击会重复触发事件的问题
Sep 23 Javascript
uni-app实现获取验证码倒计时功能
Nov 01 Javascript
Javascript中的this,bind和that使用实例
Dec 05 #Javascript
原生JS与CSS实现软件卸载对话框功能
Dec 05 #Javascript
Vue快速实现通用表单验证功能
Dec 05 #Javascript
Vue组件通信中非父子组件传值知识点总结
Dec 05 #Javascript
基于javascript实现贪吃蛇经典小游戏
Apr 10 #Javascript
微信小程序登录时如何获取input框中的内容
Dec 04 #Javascript
微信小程序日历插件代码实例
Dec 04 #Javascript
You might like
PHP 金额数字转换成英文
2010/05/06 PHP
THINKPHP支持YAML配置文件的设置方法
2015/03/17 PHP
js 3种归并操作的实例代码
2013/10/30 Javascript
点击按钮自动加关注的代码(sina微博/QQ空间/人人网/腾讯微博)
2014/01/02 Javascript
javascript的回调函数应用示例
2014/02/20 Javascript
jQuery中replaceWith()方法用法实例
2014/12/25 Javascript
基于zepto的移动端轻量级日期插件--date_picker
2016/03/04 Javascript
Javascript小技能总结(推荐)
2016/06/02 Javascript
JS跨域交互(jQuery+php)之jsonp使用心得
2016/07/01 Javascript
jQuery表单事件实例代码分享
2016/08/18 Javascript
JS简单实现禁止访问某个页面的方法
2016/09/13 Javascript
AngularJS ng-template寄宿方式用法分析
2016/11/07 Javascript
js实现右键自定义菜单
2016/12/03 Javascript
js实现弹窗暗层效果
2017/01/16 Javascript
详解webpack4升级指南以及从webpack3.x迁移
2018/06/12 Javascript
vue.js实现的经典计算器/科学计算器功能示例
2018/07/11 Javascript
JavaScript Math对象和调试程序的方法分析
2019/05/13 Javascript
JavaScript实现省份城市的三级联动
2020/02/11 Javascript
js实现简单扫雷
2020/11/27 Javascript
js仿淘宝放大镜效果
2020/12/28 Javascript
[01:00:25]2018DOTA2亚洲邀请赛3月30日 小组赛A组 VG VS Liquid
2018/03/31 DOTA
python3图片转换二进制存入mysql
2013/12/06 Python
深入理解Python中的内置常量
2017/05/20 Python
Python实现的根据IP地址计算子网掩码位数功能示例
2018/05/23 Python
PyQt5实现从主窗口打开子窗口的方法
2019/06/19 Python
python调试神器PySnooper的使用
2019/07/03 Python
django实现HttpResponse返回json数据为中文
2020/03/27 Python
人力资源管理专业毕业生推荐信
2013/11/07 职场文书
门诊手术室工作制度
2014/01/30 职场文书
财务会计毕业生个人求职信
2014/02/03 职场文书
“三支一扶”支教教师思想汇报
2014/09/13 职场文书
作风建设整改方案
2014/10/27 职场文书
公务员政审材料范文
2014/12/23 职场文书
廉洁自律心得体会2016
2016/01/13 职场文书
投资入股协议书
2016/03/22 职场文书
学习心得体会
2019/06/20 职场文书