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+dom树型菜单类,希望朋友们一起进步
May 03 Javascript
jquery实现加载等待效果示例
Sep 25 Javascript
javascript判断两个IP地址是否在同一个网段的实现思路
Dec 13 Javascript
包含中国城市的javascript对象实例
Aug 03 Javascript
JS封装cookie操作函数实例(设置、读取、删除)
Nov 17 Javascript
老生常谈js-react组件生命周期
May 02 Javascript
基于node.js express mvc轻量级框架实践
Sep 14 Javascript
微信小程序websocket实现聊天功能
Mar 30 Javascript
js中对象和面向对象与Json介绍
Jan 21 Javascript
vue-cli3.0实现一个多页面应用的历奇经历记录总结
Mar 16 Javascript
小程序实现上传视频功能
Aug 18 Javascript
js正则匹配markdown里的图片标签的实现
Mar 24 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数组函数序列之array_unshift() 在数组开头插入一个或多个元素
2011/11/07 PHP
thinkphp3.2中Lite文件替换框架入口文件或应用入口文件的方法
2015/05/21 PHP
PHP中配置IIS7实现基本身份验证的方法
2015/09/24 PHP
PHP+jQuery翻板抽奖功能实现
2015/10/19 PHP
php魔术方法功能与用法实例分析
2016/10/19 PHP
php 防止表单重复提交两种实现方法
2016/11/03 PHP
PHP使用观察者模式处理异常信息的方法详解
2019/09/24 PHP
动态为事件添加js代码示例
2009/02/15 Javascript
jquery放大镜效果超漂亮噢
2013/11/15 Javascript
javascript动态创建链接的方法
2015/05/13 Javascript
详解基于vue-cli优化的webpack配置
2017/11/06 Javascript
Vue.js 十五分钟入门图文教程
2018/09/12 Javascript
JavaScript中展开运算符及应用的实例代码
2021/01/14 Javascript
[38:21]2018DOTA2亚洲邀请赛3月30日 小组赛A组 LGD VS Newbee
2018/03/31 DOTA
Python运行报错UnicodeDecodeError的解决方法
2016/06/07 Python
Python内置模块turtle绘图详解
2017/12/09 Python
Python编程二分法实现冒泡算法+快速排序代码示例
2018/01/15 Python
python实现最小二乘法线性拟合
2019/07/19 Python
Python读取excel文件中带公式的值的实现
2020/04/17 Python
天猫精选:上天猫,就够了
2016/09/21 全球购物
经济实惠的豪华家具:My-Furniture
2019/03/12 全球购物
What's the difference between deep copy and shallow copy? (深拷贝与浅拷贝有什么区别)
2015/11/10 面试题
如何进行Linux分区优化
2016/09/13 面试题
最新大学毕业求职简历的自我评价
2013/10/18 职场文书
模具专业毕业推荐信
2014/03/08 职场文书
毕业自我鉴定书
2014/03/24 职场文书
毕业设计说明书
2014/05/07 职场文书
篮球比赛策划方案
2014/06/05 职场文书
化学教育专业自荐信
2014/07/04 职场文书
2014学习优秀共产党员先进事迹思想汇报
2014/09/14 职场文书
销售员岗位职责
2015/02/10 职场文书
人为什么会“幸灾乐祸”?
2019/08/06 职场文书
​(迎国庆)作文之我爱我的祖国
2019/09/19 职场文书
解决tk mapper 通用mapper的bug问题
2021/06/16 Java/Android
宫崎骏十大动画电影,宫崎骏好看的动画电影排名
2022/03/22 日漫
Win11运行cmd提示“请求的操作需要提升”的两种解决方法
2022/07/07 数码科技