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层级选择器用法分析
Feb 10 Javascript
js实现鼠标触发图片抖动效果的方法
Feb 27 Javascript
简介JavaScript中setUTCSeconds()方法的使用
Jun 12 Javascript
JavaScript数据类型学习笔记
Jan 25 Javascript
JavaScript必看小技巧(必看)
Jun 07 Javascript
微信小程序 wx.request(object) API详解及实例代码
Sep 30 Javascript
Javascript中return的使用与闭包详解
Jan 11 Javascript
JavaScrpt中如何使用 cookie 设置查看与删除功能
Jul 09 Javascript
vue.js 2.0实现简单分页效果
Jul 29 Javascript
vue 组件开发原理与实现方法详解
Nov 29 Javascript
json解析大全 双引号、键值对不在一起的情况
Dec 06 Javascript
使用原生JS实现火锅点餐小程序(面向对象思想)
Dec 10 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
封装一个PDO数据库操作类代码
2009/09/09 PHP
PHP删除HTMl标签的实现代码
2013/06/30 PHP
php使用正则表达式获取字符串中的URL
2016/12/29 PHP
Thinkphp3.2实用篇之计算型验证码示例
2017/02/09 PHP
CI框架教程之优化验证码机制详解【验证码辅助函数】
2019/04/16 PHP
Javascript 获取LI里的内容
2008/12/17 Javascript
JQuery与Ajax常用代码实现对比
2009/10/03 Javascript
原生javascript获取元素样式属性值的方法
2010/12/25 Javascript
javascript实现字符串反转的方法
2015/02/05 Javascript
javascript实现在线客服效果
2015/07/15 Javascript
浅谈jQuery的offset()方法及示例分享
2015/07/17 Javascript
日常收藏的jquery技巧
2015/12/02 Javascript
js对字符串进行编码的方法总结(推荐)
2016/11/10 Javascript
Bootstrap导航简单实现代码
2017/03/06 Javascript
jQuery插件HighCharts实现2D柱状图、折线图的组合多轴图效果示例【附demo源码下载】
2017/03/09 Javascript
jQuery插件HighCharts实现的2D条状图效果示例【附demo源码下载】
2017/03/15 Javascript
jquery实现图片上传前本地预览
2017/04/28 jQuery
基于iScroll实现下拉刷新和上滑加载效果
2017/07/18 Javascript
解决React Native端口号修改的方法
2017/07/28 Javascript
Javascript(es2016) import和require用法和区别详解
2017/08/11 Javascript
BootStrap给table表格的每一行添加一个按钮事件
2017/09/07 Javascript
python fabric实现远程操作和部署示例
2014/03/25 Python
Python中列表、字典、元组、集合数据结构整理
2014/11/20 Python
对python list 遍历删除的正确方法详解
2018/06/29 Python
python logging重复记录日志问题的解决方法
2018/07/12 Python
使用Python做定时任务及时了解互联网动态
2019/05/15 Python
python判断一个变量是否已经设置的方法
2020/08/13 Python
CSS3实现背景透明文字不透明的示例代码
2018/06/25 HTML / CSS
html5声频audio和视频video等新特性详细说明
2012/12/26 HTML / CSS
2014年乡镇植树节活动方案
2014/02/28 职场文书
教学评估实施方案
2014/03/16 职场文书
中小学校园安全广播稿
2014/09/29 职场文书
国际贸易实务实训报告
2014/11/05 职场文书
《赵州桥》教学反思
2016/02/17 职场文书
python数字类型和占位符详情
2022/03/13 Python
Python中的嵌套循环详情
2022/03/23 Python