React学习笔记之高阶组件应用


Posted in Javascript onJune 02, 2018

是什么

高阶组件是一个函数,能够接受一个组件并返回一个新的组件。没有任何副作用。

为什么用

封装并抽离组件的通用逻辑,让此部分逻辑在组件间更好地被复用。

如何用

//hoc为我们的高阶组件,可以使用es7装饰器语法来使用高阶组件
//当然也可以不用es7,如:let hocHello = hoc(Hello),只是es7的语法更优雅一些。
//高阶组件可以叠加使用,可以对一个组件使用多个高阶组件
@hoc       
class Hello extends React.Component {
 //
}

如何实现

属性代理

下面的例子是最简单的一个实现

function hoc(ImportComponent) {
 return class Hoc extends React.Component {
 static displayName = `Hoc(${getDisplayName(ImportComponent)})` //displayName是设置高阶组件的显示名称
 render() {
  return <ImportComponent {...this.props} />
 }
 }
}

function getDisplayName(Component) {
 return Component.displayName || Component.name || "Component"
}

作用:操作prop,refs获取组件实例

注意事项:静态方法无法传递,必须手动复制;refs无法传递。

反向继承

下面的例子是最简单的一个实现

export function hoc(ImportComponent) {
 return class Hoc extends ImportComponent {
 static displayName = `Hoc(${getDisplayName(ImportComponent)})`
 render() {
  return super.render()
 }
 }
}

作用: 操作state;渲染劫持(操作它的render函数)

注意事项:通过继承ImportComponent,除了一些静态方法,包括生命周期,state,各种function,我们都可以得到。

原则

  1. 不要修改原组件,高阶组件只是通过组合的方式将子组件包装在容器组件中,是一个无副作用的纯函数。
  2. 不要在render方法内部使用高阶组件。
  3. 高阶组件可以向组件添加功能,但是不应该大幅度地改变功能。
  4. 为了方便调试,选择一个显示名称,表示它是高阶组件的结果。

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

Javascript 相关文章推荐
setTimeout和setInterval的浏览器兼容性分析
Feb 27 Javascript
动态加载图片路径 保持JavaScript控件的相对独立性
Sep 06 Javascript
JS之Date对象和获取系统当前时间详解
Jan 13 Javascript
Javascript单例模式的介绍和实例
Oct 08 Javascript
BootStrap Fileinput初始化时的一些参数
Dec 30 Javascript
js实现3d悬浮效果
Feb 16 Javascript
原生JS实现图片无缝滚动方法(附带封装的运动框架)
Oct 01 Javascript
浅谈angularJs函数的使用方法(大小写转换,拷贝,扩充对象)
Oct 08 Javascript
详解服务端预渲染之Nuxt(介绍篇)
Apr 07 Javascript
javascript中的数据类型检测方法详解
Aug 07 Javascript
JavaScript 斐波那契数列 倒序输出 输出100以内的质数代码实例
Sep 11 Javascript
js实现飞机大战小游戏
Aug 26 Javascript
浅谈node中的cluster集群
Jun 02 #Javascript
详解AngularJS 过滤器的使用
Jun 02 #Javascript
简化vuex的状态管理方案的方法
Jun 02 #Javascript
深入了解javascript 数组的sort方法
Jun 01 #Javascript
js 数组详细操作方法及解析合集
Jun 01 #Javascript
vue 中动态绑定class 和 style的方法代码详解
Jun 01 #Javascript
一个简单的node.js界面实现方法
Jun 01 #Javascript
You might like
php设计模式 Strategy(策略模式)
2011/06/26 PHP
基于HBase Thrift接口的一些使用问题及相关注意事项的详解
2013/06/03 PHP
JSONP跨域的原理解析及其实现介绍
2014/03/22 Javascript
javascript 3d 逐侦产品展示(核心精简)
2014/03/26 Javascript
JavaScript原生对象之Number对象的属性和方法详解
2015/03/13 Javascript
JQuery zClip插件实现复制页面内容到剪贴板
2015/11/02 Javascript
jQuery插件FusionCharts实现的MSBar2D图效果示例【附demo源码】
2017/03/24 jQuery
React学习笔记之事件处理(二)
2017/07/02 Javascript
Vue 兄弟组件通信的方法(不使用Vuex)
2017/10/26 Javascript
javascript、php关键字搜索函数的使用方法
2018/05/29 Javascript
微信小程序开发之左右分栏效果的实例代码
2019/05/20 Javascript
JavaScript 斐波那契数列 倒序输出 输出100以内的质数代码实例
2019/09/11 Javascript
vue相同路由跳转强制刷新该路由组件操作
2020/08/05 Javascript
python实现模拟按键,自动翻页看u17漫画
2015/03/17 Python
Python安装官方whl包和tar.gz包的方法(推荐)
2017/06/04 Python
Python编程使用NLTK进行自然语言处理详解
2017/11/16 Python
基于python实现在excel中读取与生成随机数写入excel中
2018/01/04 Python
Flask解决跨域的问题示例代码
2018/02/12 Python
Python绘制3D图形
2018/05/03 Python
python 利用pywifi模块实现连接网络破解wifi密码实时监控网络
2019/09/16 Python
win10子系统python开发环境准备及kenlm和nltk的使用教程
2019/10/14 Python
python+tifffile之tiff文件读写方式
2020/01/13 Python
解决Pytorch自定义层出现多Variable共享内存错误问题
2020/06/28 Python
Django视图、传参和forms验证操作
2020/07/15 Python
Python实现EM算法实例代码
2020/10/04 Python
利用python进行文件操作
2020/12/04 Python
10条PHP编程习惯
2014/05/26 面试题
电气自动化自荐信
2013/10/10 职场文书
最受欢迎的自我评价
2013/12/22 职场文书
三年级数学教学反思
2014/01/31 职场文书
2014国培学习感言
2014/03/05 职场文书
党员承诺书范文2015
2015/04/27 职场文书
2015年高一班主任工作总结
2015/05/13 职场文书
金正昆讲礼仪观后感
2015/06/11 职场文书
压缩Redis里的字符串大对象操作
2021/06/23 Redis
SQL中去除重复数据的几种方法汇总(窗口函数对数据去重)
2023/05/08 MySQL