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实现控制经纬度显示地图与卫星
May 20 Javascript
JavaScript实现表格排序方法
Jun 14 Javascript
Iframe 自动适应页面的高度示例代码
Feb 26 Javascript
Javascript中的方法链(Method Chaining)介绍
Mar 15 Javascript
JS+CSS实现的竖向简洁折叠菜单效果代码
Oct 22 Javascript
详解vue与后端数据交互(ajax):vue-resource
Mar 16 Javascript
Vue2.0 UI框架ElementUI使用方法详解
Apr 14 Javascript
jQuery实现文件编码成base64并通过AJAX上传的方法
Apr 12 jQuery
vue 注册组件的使用详解
May 05 Javascript
修改vue+webpack run build的路径方法
Sep 01 Javascript
js前端如何写一个精确的倒计时代码
Oct 25 Javascript
js基于div丝滑实现贝塞尔曲线
Sep 23 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
关于WordPress的SEO优化相关的一些PHP页面脚本技巧
2015/12/10 PHP
PHP下使用mysqli的函数连接mysql出现warning: mysqli::real_connect(): (hy000/1040): ...
2016/02/14 PHP
Yii2前后台分离及migrate使用(七)
2016/05/04 PHP
yii2超好用的日期组件和时间组件
2016/05/05 PHP
php通过smtp邮件验证登陆的方法
2016/05/11 PHP
PHP序列化操作方法分析
2016/09/28 PHP
php实现微信分享朋友链接功能
2019/02/18 PHP
jQuery EasyUI API 中文文档 - Menu菜单
2011/10/03 Javascript
jquery实现鼠标滑过后动态图片提示效果实例
2015/08/10 Javascript
JQuery实现的按钮倒计时效果
2015/12/23 Javascript
javascript HTML5 Canvas实现圆盘抽奖功能
2016/04/11 Javascript
JS实现简单的右下角弹出提示窗口完整实例
2016/06/21 Javascript
JavaScript数组和对象的复制
2017/03/21 Javascript
Node+Express+MongoDB实现登录注册功能实例
2017/04/23 Javascript
JS Testing Properties 判断属性是否在对象里的方法
2017/10/01 Javascript
详解使用Next.js构建服务端渲染应用
2018/07/10 Javascript
详解html-webpack-plugin插件(用法总结)
2018/09/12 Javascript
jQuery实现合并表格单元格中相同行操作示例
2019/01/28 jQuery
js中apply和call的理解与使用方法
2019/11/27 Javascript
python使用beautifulsoup从爱奇艺网抓取视频播放
2014/01/23 Python
django框架model orM使用字典作为参数,保存数据的方法分析
2019/06/24 Python
python把转列表为集合的方法
2019/06/28 Python
原来我一直安装 Python 库的姿势都不对呀
2019/11/11 Python
Python3 获取文件属性的方式(时间、大小等)
2020/03/12 Python
Pycharm-community-2020.2.3 社区版安装教程图文详解
2020/12/08 Python
纯HTML5+CSS3制作生日蛋糕(代码易懂)
2016/11/16 HTML / CSS
YOINS官网:时尚女装网上购物
2017/03/17 全球购物
优秀党支部书记事迹材料
2014/05/29 职场文书
银行求职自荐信
2014/06/30 职场文书
2014房屋登记授权委托书
2014/10/13 职场文书
个人作风建设心得体会
2014/10/22 职场文书
一次性工伤赔偿协议书范本
2014/11/25 职场文书
2014年销售部工作总结
2014/12/01 职场文书
python3 sqlite3限制条件查询的操作
2021/04/07 Python
python 实现的截屏工具
2021/05/08 Python
如何利用golang运用mysql数据库
2022/03/13 Golang