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 08 Javascript
用JavaScript实现仿Windows关机效果
Mar 10 Javascript
另一个javascript小测验(代码集合)
Jul 27 Javascript
用Javascript评估用户输入密码的强度实现代码
Nov 30 Javascript
JavaScript打字小游戏代码
Dec 26 Javascript
jQuery随便控制任意div隐藏的方法
Jun 28 Javascript
js查找某元素中的所有图片地址的方法
Jan 16 Javascript
js代码验证手机号码和电话号码是否合法
Jul 30 Javascript
Jquery全屏相册插件zoomvisualizer具有调节放大与缩小功能
Nov 02 Javascript
jQuery使用$获取对象后检查该对象是否存在的实现方法
Sep 04 Javascript
AngularJS 将再发布一个重要版本 然后进入长期支持阶段
Jan 31 Javascript
详解Vue项目在其他电脑npm run dev运行报错的解决方法
Oct 29 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
CodeIgniter框架过滤HTML危险代码
2014/06/12 PHP
ThinkPHP模板Volist标签嵌套循环输出多维数组的方法
2016/03/23 PHP
php实现文件上传基本验证
2020/03/04 PHP
让html页面不缓存js的实现方法
2014/10/31 Javascript
Javascript中的Prototype到底是什么
2016/02/16 Javascript
Bootstrap学习笔记之css样式设计(2)
2016/06/07 Javascript
简单实现js浮动框
2016/12/13 Javascript
js 动态生成html 触发事件传参字符转义的实例
2017/02/14 Javascript
vue.js选中动态绑定的radio的指定项
2017/06/02 Javascript
nodejs动态创建二维码的方法
2017/08/12 NodeJs
Three.js利用Detector.js插件如何实现兼容性检测详解
2017/09/26 Javascript
浅谈vue自定义全局组件并通过全局方法 Vue.use() 使用该组件
2017/12/07 Javascript
layui数据表格实现重载数据表格功能(搜索功能)
2019/07/27 Javascript
微信小程序中悬浮窗功能的实现代码
2019/08/02 Javascript
vite2.0+vue3移动端项目实战详解
2021/03/03 Vue.js
[56:17]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第三场 8.22
2019/09/05 DOTA
python线程池的实现实例
2013/11/18 Python
python求pi的方法
2014/10/08 Python
通过Pandas读取大文件的实例
2018/06/07 Python
教你利用Python玩转histogram直方图的五种方法
2018/07/30 Python
浅谈python编译pyc工程--导包问题解决
2019/03/20 Python
Python变量访问权限控制详解
2019/06/29 Python
Python 静态方法和类方法实例分析
2019/11/21 Python
最新2019Pycharm安装教程 亲测
2020/02/28 Python
Python序列化pickle模块使用详解
2020/03/05 Python
基于Python计算圆周率pi代码实例
2020/03/25 Python
基于python检查矩阵计算结果
2020/05/21 Python
python统计mysql数据量变化并调用接口告警的示例代码
2020/09/21 Python
10种CSS3实现的loading动画,挑一个走吧?
2020/11/16 HTML / CSS
详解canvas绘制网络字体几种方法
2019/08/27 HTML / CSS
魔声耳机官方网站:Monster是世界第一品牌的高性能耳机
2016/10/26 全球购物
花卉与景观设计系大学生求职信
2013/10/01 职场文书
员工试用期考核自我鉴定
2014/04/13 职场文书
领导干部考核评语
2015/01/04 职场文书
2015年酒店客房部工作总结
2015/04/25 职场文书
大学三好学生主要事迹范文
2015/11/03 职场文书