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控制swfObject应用介绍
Nov 29 Javascript
jquery的ajax和getJson跨域获取json数据的实现方法
Feb 04 Javascript
使用原生js写的一个简单slider
Apr 29 Javascript
JavaScript实现带缓冲效果的随屏滚动漂浮广告代码
Nov 06 Javascript
JS实现页面跳转参数不丢失的方法
Nov 28 Javascript
jQuery中on方法使用注意事项详解
Feb 15 Javascript
js转换对象为xml
Feb 17 Javascript
jQuery常见面试题之DOM操作详析
Jul 05 jQuery
React Native AsyncStorage本地存储工具类
Oct 24 Javascript
JS中数据结构之栈
Jan 01 Javascript
vue实现多个echarts根据屏幕大小变化而变化实例
Jul 19 Javascript
vue实现简易图片左右旋转,上一张,下一张组件案例
Jul 31 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
改变Apache端口等配置修改方法
2008/06/05 PHP
PHP 多维数组排序实现代码
2009/08/05 PHP
国外十大最流行的PHP框架排名
2013/07/04 PHP
php-fpm配置详解
2014/02/12 PHP
CodeIgniter删除和设置Cookie的方法
2015/04/07 PHP
PHP 接入微信扫码支付总结(总结篇)
2016/11/03 PHP
PHP数据的提交与过滤基本操作实例详解
2016/11/11 PHP
js类后台管理菜单类-MenuSwitch
2007/09/12 Javascript
JavaScript 学习笔记(十二) dom
2010/01/21 Javascript
jquery如何获取复选框的值
2013/12/12 Javascript
以Python代码实例展示kNN算法的实际运用
2015/10/26 Javascript
Bootstrap框架的学习教程详解(二)
2016/10/18 Javascript
AngularJs表单验证实例代码解析
2016/11/29 Javascript
Webpack如何引入bootstrap的方法
2017/06/17 Javascript
详解微信小程序 template添加绑定事件
2017/06/23 Javascript
webpack配置之后端渲染详解
2017/10/26 Javascript
JavaScript实现创建自定义对象的常用方式总结
2018/07/09 Javascript
Nodejs处理异常操作示例
2018/12/25 NodeJs
Node.js+ELK日志规范的实现
2019/05/23 Javascript
JavaScript实现栈结构Stack过程详解
2020/03/07 Javascript
[01:16:28]DOTA2-DPC中国联赛 正赛 iG vs Magma BO3 第二场 2月23日
2021/03/11 DOTA
python对配置文件.ini进行增删改查操作的方法示例
2017/07/28 Python
Python内置函数——__import__ 的使用方法
2017/11/24 Python
Django权限机制实现代码详解
2018/02/05 Python
pygame游戏之旅 游戏中添加显示文字
2018/11/20 Python
python实现将多个文件分配到多个文件夹的方法
2019/01/07 Python
python实现串口通信的示例代码
2020/02/10 Python
opencv+python实现均值滤波
2020/02/19 Python
python开根号实例讲解
2020/08/30 Python
浅析CSS3 用text-overflow解决文字排版问题
2020/10/28 HTML / CSS
中国一家综合的外贸B2C电子商务网站:DealeXtreme(DX)
2020/03/10 全球购物
自立自强的名人事例
2014/02/10 职场文书
搞笑的爱情检讨书
2014/10/01 职场文书
2014年精神文明建设工作总结
2014/11/19 职场文书
教师年度考核自我评鉴
2015/08/11 职场文书
Python办公自动化之Excel(中)
2021/05/24 Python