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下IE与FF兼容函数收集
Sep 17 Javascript
Dom与浏览器兼容性说明
Oct 25 Javascript
两个Javascript小tip资料
Nov 23 Javascript
js实现tab切换效果实例
Sep 16 Javascript
那些精彩的JavaScript代码片段
Jan 12 Javascript
vue实现仿淘宝结账页面实例代码
Nov 08 Javascript
浅谈Vue SSR 的 Cookies 问题
Nov 20 Javascript
在iFrame子页面里实现模态框的方法
Aug 17 Javascript
JavaScript实现简单音乐播放器
Apr 17 Javascript
JS 自执行函数原理及用法
Aug 05 Javascript
Elasticsearch实现复合查询高亮结果功能
Sep 10 Javascript
解决Vue 给mapState中定义的属性赋值报错的问题
Jun 22 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计划任务、定时执行任务的实现代码
2011/04/23 PHP
PHP冒泡排序算法代码详细解读
2011/07/17 PHP
PHP数据类型之布尔型的介绍
2013/04/28 PHP
限制ckeditor上传图片文件大小的方法
2013/11/15 PHP
php xhprof使用实例详解
2019/04/15 PHP
枚举JavaScript对象的函数
2006/12/22 Javascript
JQuery.closest(),parent(),parents()寻找父结点
2012/02/17 Javascript
让人印象深刻的10个jQuery手风琴效果应用
2012/05/08 Javascript
js实现在文本框光标处添加字符的方法介绍
2012/11/24 Javascript
js的[defer]和[async]属性
2014/11/24 Javascript
iScroll中事件点击触发两次解决方案
2015/03/11 Javascript
BootStrap实现带有增删改查功能的表格(DEMO详解)
2016/10/26 Javascript
浅析js的模块化编写 require.js
2016/12/07 Javascript
微信小程序 template模板详解及实例
2017/02/21 Javascript
如何将你的AngularJS1.x应用迁移至React的方法
2018/02/01 Javascript
纯JS实现出生日期[年月日]下拉菜单效果
2018/06/01 Javascript
vue-router 源码之实现一个简单的 vue-router
2018/07/02 Javascript
深度了解vue.js中hooks的相关知识
2019/06/14 Javascript
详解微信小程序中var、let、const用法与区别
2020/01/11 Javascript
vue Treeselect下拉树只能选择第N级元素实现代码
2020/08/31 Javascript
python实现字符串和日期相互转换的方法
2015/05/13 Python
Python 实现一个颜色色值转换的小工具
2016/12/06 Python
Python3.6安装及引入Requests库的实现方法
2018/01/24 Python
python实现微信自动回复功能
2018/04/11 Python
python函数局部变量、全局变量、递归知识点总结
2019/11/15 Python
python GUI库图形界面开发之PyQt5表格控件QTableView详细使用方法与实例
2020/03/01 Python
美国最受欢迎的童装品牌之一:The Children’s Place
2016/07/23 全球购物
萨克斯第五大道的折扣店:Saks Fifth Avenue OFF 5TH
2016/08/25 全球购物
一套C#面试题
2013/10/09 面试题
党的作风建设心得体会
2014/10/22 职场文书
教师工作表现评语
2014/12/31 职场文书
学校端午节活动总结
2015/02/11 职场文书
欢送会主持词
2015/07/01 职场文书
会议简报格式范文
2015/07/20 职场文书
您对思维方式了解多少?
2019/12/09 职场文书
SpringBoot 集成Redis 过程
2021/06/02 Redis