react开发教程之React 组件之间的通信方式


Posted in Javascript onAugust 12, 2017

这两天学习了React感觉组件通信这个地方知识点挺多的,而且很重要,所以,今天添加一点小笔记。

父子组件通讯

通讯手段

这是最常见的通信方式,父组件只需要将子组件需要的props传给子组件,子组件直接通过this.props来使用。

通讯内容

更多要提的是如何合理的设置子组件的props,要想将子组件设计成一个复用性强的通用组件,需要将能够复用的部分抽象出来,抽象出来的props有两种形成,一种是简单的变量,另一种是抽象出来处理某种逻辑函数。

以Header 组件为例

react开发教程之React 组件之间的通信方式

//HeaderBar.jsx 子组件

import React, { Component } from 'react';

class Header extends Component {
  constructor() {
    super();
    this.handleClick = (e) => {
      console.log(this)
    }
  }

  renderLeftComponent() {

    let leftDOM = {};
    if (this.props.renderLeftComponent) {
      return this.props.renderLeftComponent();
    }

    if (this.props.showBack) {
      let backFunc = this.props.onBack || this.goBack;
      leftDOM = (<a onClick={backFunc.bind(this)}><i className="icon left-icon icon-left-arrow"></i></a>);
    }
    return leftDOM;
  }
  

  renderRightComponent() {
    if (this.props.renderRightComponent) {
      return this.props.renderRightComponent();
    }
  }

  goBack() {
    alert("返回上一页")
  }

  render() {
    return (
      <header className="header-bar">
        {this.renderLeftComponent()}
        <span>{this.props.title || '滴滴'}</span>
        {this.renderRightComponent()}
      </header>
    );
  }
}

export default Header;

//父亲组件部分代码App.jsx
import HeaderBar from "./components/Header";

let leftIcon = function () {
 return (
  <a><i className="icon left-icon icon-left-haha"></i>左边按钮</a>
 )
}
class App extends Component {

 render() {
  return (
   <div className="App">
    <HeaderBar title="滴滴打车" renderLeftComponent={leftIcon} />
   </div>
  );
 }
}

子父组件通讯

父-子组件通信的手段是通过子组件的props是子组件用父组件的东西,子-父组件通信,是父组件用子组件的东西,暂时了解的两种方法

利用回调函数

父组件通过props传递一个方法给子组件,子组件通过props方法将子组件数据传递给父组件

利用ref

父组件通过refs调用子组件的属性

跨级组件通信

在React中当一个属性反复使用并且存在与好几个子组件中的时候,这个时候我们如果通过props一级一级传递的话可以实现多层级访问,但是这样出现一个问题就是会使代码非常混乱,在React中国年,我们还可以使用 context 来实现跨级父子组件间的通信;

在react中context称为虫洞

// Component 父级
class parentComponent extends React.Component {
  
  // add the following property
  static childContextTypes = {
    color: React.PropTypes.string
  }
  
  // 添加下面方法
  getChildContext() {
    return {
      color: "#f00"
    }
  }
  
  render() {
    <div>
      <Child1 />
    </div>
  }
}


// Component Child1
class Child1 extends React.Component {
  // 添加下面属性
  static contextTypes = {
    color: React.PropTypes.string
  }
  
  render() {
    <div>{this.context.color}</div>
  }
}

同级组件通信

同级组件之间的通信还是需要通过父组件作为中介,利用多次父-子组件通信,项目中将需要传递的数据放在了父组件的state中,变动时可以自动的同步传递。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Kibo 用于处理键盘事件的Javascript工具库
Oct 28 Javascript
JS仿百度搜索自动提示框匹配查询功能
Nov 21 Javascript
innerHTML在IE中报错解决方案
Dec 15 Javascript
浅谈javascript中的call、apply、bind
Mar 06 Javascript
基于JavaScript实现 网页切出 网站title变化代码
Apr 03 Javascript
谈谈JavaScript中的几种借用方法
Aug 09 Javascript
你应该知道的几类npm依赖包管理详解
Oct 06 Javascript
vue中使用ueditor富文本编辑器
Feb 08 Javascript
iview tabs 顶部导航栏和模块切换栏的示例代码
Mar 04 Javascript
jQuery表单选择器用法详解
Aug 22 jQuery
layui-select动态选中值的例子
Sep 23 Javascript
js实现简单放大镜效果
Mar 07 Javascript
vuejs+element-ui+laravel5.4上传文件的示例代码
Aug 12 #Javascript
浅谈关于angularJs中使用$.ajax的注意点
Aug 12 #Javascript
详解Vue-Cli 异步加载数据的一些注意点
Aug 12 #Javascript
js模块加载方式浅析
Aug 12 #Javascript
浅谈angular2 组件的生命周期钩子
Aug 12 #Javascript
Node.js pipe实现源码解析
Aug 12 #Javascript
vue实现移动端图片裁剪上传功能
Aug 18 #Javascript
You might like
ZF等常用php框架中存在的问题
2008/01/10 PHP
php 短链接算法收集与分析
2011/12/30 PHP
PHP中将网页导出为Word文档的代码
2012/05/25 PHP
php实现TCP端口检测的方法
2015/04/01 PHP
PHP实现的敏感词过滤方法示例
2019/03/06 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
2019/12/20 PHP
jQuery.get、jQuery.getJSON、jQuery.post无法返回JSON问题的解决方法
2011/07/28 Javascript
JavaScript 基础篇之运算符、语句(二)
2012/04/07 Javascript
{}与function(){}选用空对象{}来存放keyValue
2012/05/23 Javascript
表单元素的submit()方法和onsubmit事件应用概述
2013/02/01 Javascript
js调用webservice中的方法实现思路及代码
2013/02/25 Javascript
解决javascript:window.close()在chrome,Firefox下失效的问题
2013/05/07 Javascript
基于Bootstrap漂亮简洁的CSS3价格表(附源码下载)
2017/02/28 Javascript
ReactNative踩坑之配置调试端口的解决方法
2017/07/28 Javascript
js微信分享实现代码
2020/10/11 Javascript
使用JS获取页面上的所有标签
2018/10/18 Javascript
Vue+Element实现动态生成新表单并添加验证功能
2019/05/23 Javascript
基于Vue实现平滑过渡的拖拽排序功能
2019/06/12 Javascript
JS判断浏览器类型与操作系统的方法分析
2020/04/30 Javascript
python私有属性和方法实例分析
2015/01/15 Python
python将文本中的空格替换为换行的方法
2018/03/19 Python
对Python中type打开文件的方式介绍
2018/04/28 Python
python中int与str互转方法
2018/07/02 Python
Python关于excel和shp的使用在matplotlib
2019/01/03 Python
python爬取微信公众号文章的方法
2019/02/26 Python
对django2.0 关联表的必填on_delete参数的含义解析
2019/08/09 Python
python OpenCV GrabCut使用实例解析
2019/11/11 Python
HTML5之web workers_动力节点Java学院整理
2017/07/17 HTML / CSS
《长城和运河》教学反思
2014/04/14 职场文书
教师工作失职检讨书
2014/09/18 职场文书
优秀党员推荐材料
2014/12/18 职场文书
主题班会开场白
2015/06/01 职场文书
行为习惯主题班会
2015/08/14 职场文书
公司年会晚会开幕词
2019/04/02 职场文书
一文搞懂Redis中String数据类型
2022/04/03 Redis
python热力图实现的完整实例
2022/06/25 Python