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和JS实现奇偶行背景颜色自定义效果
Nov 19 Javascript
在Javascript中 声明时用&quot;var&quot;与不用&quot;var&quot;的区别
Apr 15 Javascript
利用Keydown事件阻止用户输入实现代码
Mar 11 Javascript
js实现的类似于asp数据字典的数据类型代码实例
Sep 03 Javascript
详解vue与后端数据交互(ajax):vue-resource
Mar 16 Javascript
让微信小程序支持ES6中Promise特性的方法详解
Jun 13 Javascript
简单实现js拖拽效果
Jul 25 Javascript
推荐VSCode 上特别好用的 Vue 插件之vetur
Sep 14 Javascript
vue 使用eventBus实现同级组件的通讯
Mar 02 Javascript
深入Vue-Router路由嵌套理解
Aug 13 Javascript
vsCode安装使用教程和插件安装方法
Aug 24 Javascript
vue组件之间通信方式实例总结【8种方式】
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
Yii核心验证器api详解
2016/11/23 PHP
PHP大文件切割上传功能实例分析
2019/07/01 PHP
JQuery-tableDnD 拖拽的基本使用介绍
2013/07/04 Javascript
jquery定时滑出可最小化的底部提示层特效代码
2013/10/02 Javascript
js获取或设置当前窗口url参数的小例子
2013/10/14 Javascript
JS比较两个时间大小的简单示例代码
2013/12/20 Javascript
javascript实现查找数组中最大值方法汇总
2016/02/13 Javascript
灵活使用数组制作图片切换js实现
2016/07/28 Javascript
Vue.JS入门教程之事件监听
2016/12/01 Javascript
JavaScript数据结构之双向链表定义与使用方法示例
2017/10/27 Javascript
基于vue2.0实现简单轮播图
2017/11/27 Javascript
Vue单页及多页应用全局配置404页面实践记录
2018/05/22 Javascript
实例详解Vue项目使用eslint + prettier规范代码风格
2018/08/20 Javascript
如何利用vue+vue-router+elementUI实现简易通讯录
2019/05/13 Javascript
js实现移动端tab切换时下划线滑动效果
2019/09/08 Javascript
Vue 刷新当前路由的实现代码
2019/09/26 Javascript
vue-resourc发起异步请求的方法
2020/02/11 Javascript
ant-design-vue中的select选择器,对输入值的进行筛选操作
2020/10/24 Javascript
在Python中用has_key()方法查找键是否存在的教程
2015/05/21 Python
利用python获取当前日期前后N天或N月日期的方法示例
2017/07/30 Python
python实现简易云音乐播放器
2018/01/04 Python
python 魔法函数实例及解析
2019/09/25 Python
Python中使用filter过滤列表的一个小技巧分享
2020/05/02 Python
python不同系统中打开方法
2020/06/23 Python
python SOCKET编程基础入门
2021/02/27 Python
CSS3 3D立方体效果示例-transform也不过如此
2016/12/05 HTML / CSS
经济学博士求职自荐信范文
2013/11/23 职场文书
产品质量承诺书
2014/03/27 职场文书
煤矿安全生产月活动总结
2014/07/05 职场文书
社区护士演讲稿
2014/08/27 职场文书
篮球赛闭幕式主持词
2015/07/03 职场文书
《玩出了名堂》教学反思
2016/02/17 职场文书
《和时间赛跑》读后感3篇
2019/12/16 职场文书
HTML基础-标签分类(闭合标签,空标签,块级元素,行内元素,行级块元素,可替换元素)
2021/03/31 HTML / CSS
python实现简易名片管理系统
2021/04/11 Python
MySQL范围查询优化的场景实例详解
2022/06/10 MySQL