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 相关文章推荐
总结AJAX相关JS代码片段和浏览器模型
Aug 15 Javascript
javascript开发中因空格引发的错误
Nov 08 Javascript
jQuery LigerUI 使用教程入门篇
Jan 18 Javascript
Node.js入门教程:在windows和Linux上安装配置Node.js图文教程
Aug 14 Javascript
Javascript基础教程之while语句
Jan 18 Javascript
jqueryUI里拖拽排序示例分析
Feb 26 Javascript
vue.js指令和组件详细介绍及实例
Apr 06 Javascript
Angular.js项目中使用gulp实现自动化构建以及压缩打包详解
Jul 19 Javascript
JS实现全屏预览F11功能的示例代码
Jul 23 Javascript
Vue实现表格批量审核功能实例代码
May 28 Javascript
浅谈layui 表单元素的选中问题
Oct 25 Javascript
jquery实现轮播图特效
Apr 12 jQuery
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
曾在DC漫画界反派角色扮演的演员,谁才是你心目中的小丑之王?
2020/04/09 欧美动漫
PHP漏洞全解(详细介绍)
2012/11/13 PHP
基于php缓存的详解
2013/05/15 PHP
php求今天、昨天、明天时间戳的简单实现方法
2016/07/28 PHP
在标题栏显示新消息提示,很多公司项目中用到这个方法
2011/11/04 Javascript
文字不间断滚动(上下左右)实例代码
2013/04/21 Javascript
jquery animate实现鼠标放上去显示离开隐藏效果
2013/07/21 Javascript
JavaScript作用域与作用域链深入解析
2013/12/06 Javascript
jquery实现上下左右滑动的方法
2015/02/09 Javascript
JavaScript面对国际化编程时的一些建议
2015/06/24 Javascript
Jsonp 关键字详解及json和jsonp的区别,ajax和jsonp的区别
2015/12/30 Javascript
懒加载实现的分页&amp;&amp;网站footer自适应
2016/12/21 Javascript
NodeJS测试框架mocha入门教程
2017/03/28 NodeJs
jQuery插件FusionCharts绘制的2D双面积图效果示例【附demo源码】
2017/04/11 jQuery
基于vue 动态加载图片src的解决方法
2018/02/05 Javascript
echarts实现地图定时切换散点与多图表级联联动详解
2018/08/07 Javascript
JS中注入eval, Function等系统函数截获动态代码
2019/04/03 Javascript
Python检测生僻字的实现方法
2016/10/23 Python
python文件拆分与重组实例
2018/12/10 Python
对python中数据集划分函数StratifiedShuffleSplit的使用详解
2018/12/11 Python
对python 合并 累加两个dict的实例详解
2019/01/21 Python
PyQt QCombobox设置行高的方法
2019/06/20 Python
django 通过url实现简单的权限控制的例子
2019/08/16 Python
Django学习之文件上传与下载
2019/10/06 Python
Python3的unicode编码转换成中文的问题及解决方案
2019/12/10 Python
Python代码生成视频的缩略图的实例讲解
2019/12/22 Python
Html5移动端弹幕动画实现示例代码
2018/08/27 HTML / CSS
Book Depository澳大利亚:世界领先的专业在线书店之一
2018/12/27 全球购物
挖掘机司机岗位职责
2014/02/12 职场文书
党员承诺书范文2015
2015/04/27 职场文书
教师节联欢会主持词
2015/07/04 职场文书
2016中秋晚会开幕词
2016/03/03 职场文书
如何用Navicat操作MySQL
2021/05/12 MySQL
Vue过滤器(filter)实现及应用场景详解
2021/06/15 Vue.js
jQuery实现广告显示和隐藏动画
2021/07/04 jQuery
SQL Server中使用判断语句(IF ELSE/CASE WHEN )案例
2021/07/07 SQL Server