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 相关文章推荐
jQuery ajax cache缓存问题
Jul 01 Javascript
High Performance JavaScript(高性能JavaScript)读书笔记分析
May 05 Javascript
jquery网页元素拖拽插件效果及实现
Aug 05 Javascript
浅谈JSON中stringify 函数、toJosn函数和parse函数
Jan 26 Javascript
jQuery中bind(),live(),delegate(),on()绑定事件方法实例详解
Jan 19 Javascript
Jquery+ajax+JAVA(servlet)实现下拉菜单异步取值
Mar 23 Javascript
JS优化与惰性载入函数实例分析
Apr 06 Javascript
angularJS利用ng-repeat遍历二维数组的实例代码
Jun 03 Javascript
Vue 2.5 Level E 发布了: 新功能特性一览
Oct 24 Javascript
Javacript中自定义的map.js  的方法
Nov 26 Javascript
Angular2之二级路由详解
Aug 31 Javascript
详解小程序云开发数据库
May 20 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比较多维数组中值的大小排序实现代码
2012/09/08 PHP
利用laravel搭建一个迷你博客实战教程
2017/08/13 PHP
分析php://output和php://stdout的区别
2018/05/06 PHP
js 文本滚动效果的实例代码
2013/08/17 Javascript
JS实现弹性漂浮效果的广告代码
2015/09/02 Javascript
js window对象属性和方法相关资料整理
2015/11/11 Javascript
Node.js开发者必须了解的4个JS要点
2016/02/21 Javascript
Bootstrap编写一个在当前网页弹出可关闭的对话框 非弹窗
2016/06/30 Javascript
JS实现简单的tab切换选项卡效果
2016/09/21 Javascript
不间断循环滚动效果的实例代码(必看篇)
2016/10/08 Javascript
浅谈js之字面量、对象字面量的访问、关键字in的用法
2016/11/20 Javascript
BootStrap表单控件之文本域textarea
2017/05/23 Javascript
vue-cli+webpack项目 修改项目名称的方法
2018/02/28 Javascript
Vue2.0 实现移动端图片上传功能
2018/05/30 Javascript
jQuery实现的监听导航滚动置顶状态功能示例
2018/07/23 jQuery
vue+axios实现文件下载及vue中使用axios的实例
2018/09/21 Javascript
Vue.js组件间通信方式总结【推荐】
2018/11/23 Javascript
微信小程序事件对象中e.target和e.currentTarget的区别详解
2019/05/08 Javascript
vue+ts下对axios的封装实现
2020/02/18 Javascript
ssm+vue前后端分离框架整合实现(附源码)
2020/07/08 Javascript
解决vue项目,npm run build后,报路径错的问题
2020/08/13 Javascript
python利用rsa库做公钥解密的方法教程
2017/12/10 Python
Python增强赋值和共享引用注意事项小结
2019/05/28 Python
关于h5中的fetch方法解读(小结)
2017/11/15 HTML / CSS
html5利用canvas实现颜色容差抠图功能
2019/12/23 HTML / CSS
阿玛尼美妆俄罗斯官网:Giorgio Armani Beauty RU
2020/07/19 全球购物
库存图片、照片、矢量图、视频和音乐:Shutterstock
2021/02/12 全球购物
大学生毕业自荐信
2013/10/10 职场文书
大学优秀班集体申报材料
2014/05/23 职场文书
北京离婚协议书范文2014
2014/09/29 职场文书
法律服务所工作总结
2015/08/10 职场文书
2016年秋季趣味运动会开幕词
2016/03/04 职场文书
2016年“6.26”禁毒宣传月系列活动总结
2016/04/05 职场文书
Java 泛型详解(超详细的java泛型方法解析)
2021/07/02 Java/Android
python代码实现扫码关注公众号登录的实战
2021/11/01 Python