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的面向对象方法以及差别
Mar 31 Javascript
jQuery生成asp.net服务器控件的代码
Feb 04 Javascript
jQuery ctrl+Enter shift+Enter实现代码
Feb 07 Javascript
jquery实现的超出屏幕时把固定层变为定位层的代码
Feb 23 Javascript
jquery Moblie入门—hello world的示例代码学习
Jan 08 Javascript
使用JS读秒使用示例
Sep 21 Javascript
jQuery中 prop() attr()使用详解
May 19 Javascript
简单谈谈JavaScript的同步与异步
Dec 31 Javascript
Zero Clipboard实现浏览器复制到剪贴板的方法(多个复制按钮)
Mar 24 Javascript
完美解决jQuery的hover事件在IE中不停闪动的问题
Feb 10 Javascript
Angular利用trackBy提升性能的方法
Jan 26 Javascript
TensorFlow.js 微信小程序插件开始支持模型缓存的方法
Feb 21 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
实例(Smarty+FCKeditor新闻系统)
2007/01/02 PHP
PHP 开发环境配置(Zend Server安装)
2010/04/28 PHP
PHP 5.3.1 安装包 VC9 VC6不同版本的区别是什么
2010/07/04 PHP
无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装最快的解决办法
2010/08/01 PHP
PHP __autoload函数(自动载入类文件)的使用方法
2012/02/04 PHP
在Linux系统的服务器上隐藏PHP版本号的方法
2015/06/06 PHP
PHP基于迭代实现文件夹复制、删除、查看大小等操作的方法
2017/08/11 PHP
将HTMLCollection/NodeList/伪数组转换成数组的实现方法
2011/06/20 Javascript
MooTools 页面滚动浮动层智能定位实现代码
2011/08/23 Javascript
JQUERY简单按钮轮换选中效果实现方法
2015/05/07 Javascript
js阻止浏览器默认行为的简单实例
2016/05/15 Javascript
30分钟快速掌握Bootstrap框架
2016/05/24 Javascript
angularJs关于指令的一些冷门属性详解
2016/10/24 Javascript
javascript 面向对象function详解及实例代码
2017/02/28 Javascript
vue-cli单页应用改成多页应用配置详解
2017/07/14 Javascript
使用JavaScript解析URL的方法示例
2019/03/01 Javascript
ES6中的迭代器、Generator函数及Generator函数的异步操作方法
2019/05/12 Javascript
angular6开发steps步骤条组件
2019/07/04 Javascript
Vue 3.x+axios跨域方案的踩坑指南
2019/07/04 Javascript
详解Angular cli配置过程记录
2019/11/07 Javascript
Echarts实现单条折线可拖拽效果
2019/12/19 Javascript
vue 实现根据data中的属性值来设置不同的样式
2020/08/04 Javascript
[45:18]完美世界DOTA2联赛循环赛 PXG vs IO 第二场 11.06
2020/11/09 DOTA
python通过wxPython打开一个音频文件并播放的方法
2015/03/25 Python
python fabric使用笔记
2015/05/09 Python
Python抽象类的新写法
2015/06/18 Python
Python中read()、readline()和readlines()三者间的区别和用法
2017/07/30 Python
python科学计算之numpy——ufunc函数用法
2019/11/25 Python
Python sorted排序方法如何实现
2020/03/31 Python
详解Python中Pyyaml模块的使用
2020/10/08 Python
HTML5的语法变化介绍
2013/08/13 HTML / CSS
HTML5实现可缩放时钟代码
2017/08/28 HTML / CSS
优秀信贷员先进事迹
2014/01/31 职场文书
2019新员工心得体会
2019/06/25 职场文书
七年级作文之我的梦想
2019/10/16 职场文书
vue二维数组循环嵌套方式 循环数组、循环嵌套数组
2022/04/24 Vue.js