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程序 入门者学习
Jul 09 Javascript
Jquery 插件学习实例1 插件制作说明与tableUI优化
Apr 02 Javascript
JS访问SWF的函数用法实例
Jul 01 Javascript
jQuery Mobile开发中日期插件Mobiscroll使用说明
Mar 02 Javascript
js创建对象几种方式的优缺点对比
Sep 28 Javascript
Javascript动画效果(4)
Oct 11 Javascript
详解Javascript函数声明与递归调用
Oct 22 Javascript
JavaScript 总结几个提高性能知识点(推荐)
Feb 20 Javascript
angularJS之$http:与服务器交互示例
Mar 17 Javascript
jQuery实现对网页节点的增删改查功能示例
Sep 18 jQuery
Vue使用JSEncrypt实现rsa加密及挂载方法
Feb 07 Javascript
js实现验证码干扰(静态)
Feb 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中使用Oracle数据库(1)
2006/10/09 PHP
qq登录,新浪微博登录接口申请过程中遇到的问题
2014/07/22 PHP
PHP中比较时间大小实例
2014/08/21 PHP
详解PHP数组赋值方法
2015/11/07 PHP
php获取ajax的headers方法与内容实例
2017/12/27 PHP
PHP pthreads v3在centos7平台下的安装与配置操作方法
2020/02/21 PHP
JSP跨iframe如何传递参数实现代码
2013/09/21 Javascript
将查询条件的input、select清空
2014/01/14 Javascript
jquery ajax 局部刷新小案例
2014/02/08 Javascript
用js提交表单解决一个页面有多个提交按钮的问题
2014/09/01 Javascript
JavaScript之数组(Array)详解
2015/04/01 Javascript
js去除浏览器默认底图的方法
2015/06/08 Javascript
Javascript中的getUTCHours()方法使用详解
2015/06/10 Javascript
论JavaScript模块化编程
2016/03/07 Javascript
Vue键盘事件用法总结
2017/04/18 Javascript
妙用Angularjs实现表格按指定列排序
2017/06/23 Javascript
从vue源码看props的用法
2019/01/09 Javascript
用Python写的图片蜘蛛人代码
2012/08/27 Python
Django 开发环境配置过程详解
2019/07/18 Python
Python的pygame安装教程详解
2020/02/10 Python
django 实现简单的插入视频
2020/04/07 Python
python退出循环的方法
2020/06/18 Python
如何在mac版pycharm选择python版本
2020/07/21 Python
css3之UI元素状态伪类选择器实例演示
2017/08/11 HTML / CSS
什么是虚拟内存?虚拟内存有什么优势?
2016/02/09 面试题
党员党性分析材料
2014/02/17 职场文书
企业精细化管理实施方案
2014/03/23 职场文书
学期评语大全
2014/04/30 职场文书
党员廉洁自律承诺书
2014/05/26 职场文书
租房协议书范文
2014/08/20 职场文书
争做文明公民倡议书
2014/08/29 职场文书
国家机关领导干部民主生活会对照检查材料思想汇报
2014/09/17 职场文书
2014年计生工作总结
2014/11/21 职场文书
2015年十一国庆节演讲稿
2015/03/20 职场文书
2016新年问候语大全
2015/11/11 职场文书
MyBatis在注解上使用动态SQL方式(@select使用if)
2022/07/07 Java/Android