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 相关文章推荐
List the Stored Procedures in a SQL Server database
Jun 20 Javascript
JS实现图片预加载无需等待
Dec 21 Javascript
微信小程序通过api接口将json数据展现到小程序示例
Jan 20 Javascript
详解javascript立即执行函数表达式IIFE
Feb 13 Javascript
vue.js中toast用法及使用toast弹框的实例代码
Aug 27 Javascript
微信小程序实现多选删除列表数据功能示例
Jan 15 Javascript
记一次vue-webpack项目优化实践详解
Feb 17 Javascript
基于 jQuery 实现键盘事件监听控件
Apr 04 jQuery
微信小程序实现圆形进度条动画
Nov 18 Javascript
js+html实现周岁年龄计算器
Jun 25 Javascript
JS实现的定时器展示简单秒表、页面弹框及跳转操作完整示例
Jan 26 Javascript
如何在Vue中使localStorage具有响应式(思想实验)
Jul 14 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
AMFPHP php远程调用(RPC, Remote Procedure Call)工具 快速入门教程
2010/05/10 PHP
Zend Studio (eclipse)使用速度优化方法
2011/03/23 PHP
改写ThinkPHP的U方法使其路由下分页正常
2014/07/02 PHP
PHP的Yii框架中YiiBase入口类的扩展写法示例
2016/03/17 PHP
PHP给文字内容中的关键字进行套红处理
2016/04/12 PHP
DOM 脚本编程中的兄弟节点
2009/10/31 Javascript
通过JQuery实现win8一样酷炫的动态磁贴效果(示例代码)
2013/07/13 Javascript
JS清空多文本框、文本域示例代码
2014/02/24 Javascript
JS限制文本框只能输入数字和字母方法
2015/02/28 Javascript
浅谈js中字符和数组一些基本算法题
2016/08/15 Javascript
jQuery命名空间与闭包用法示例
2017/01/12 Javascript
jquery 一键复制到剪切板的实例
2017/09/20 jQuery
基于vue2.0实现简单轮播图
2017/11/27 Javascript
基于IView中on-change属性的使用详解
2018/03/15 Javascript
完美解决vue 中多个echarts图表自适应的问题
2020/07/19 Javascript
python中self原理实例分析
2015/04/30 Python
Python中列表和元组的使用方法和区别详解
2020/12/30 Python
解决pyqt中ui编译成窗体.py中文乱码的问题
2016/12/23 Python
如何安装多版本python python2和python3共存以及pip共存
2018/09/18 Python
在Qt中正确的设置窗体的背景图片的几种方法总结
2019/06/19 Python
详解CSS3选择器的使用方法汇总
2015/11/24 HTML / CSS
html5 拖拽上传图片实例演示
2013/04/01 HTML / CSS
澳大利亚运动鞋商店:Platypus Shoes
2019/09/27 全球购物
什么是反射
2012/03/17 面试题
食品安全处置方案
2014/06/14 职场文书
民事赔偿协议书
2014/11/02 职场文书
2014年库房工作总结
2014/11/26 职场文书
初中家长评语和期望
2014/12/26 职场文书
小学生2015教师节演讲稿
2015/03/19 职场文书
2015年校务公开工作总结
2015/05/26 职场文书
辛德勒的名单观后感
2015/06/03 职场文书
2016年第104个国际护士节活动总结
2016/04/06 职场文书
超市啤酒狂欢夜策划方案范文!
2019/07/03 职场文书
关于感恩的作文
2019/08/26 职场文书
python如何做代码性能分析
2021/04/26 Python
sql通过日期判断年龄函数的示例代码
2021/07/16 SQL Server