【高阶组件和函数式编程】

function hello() {
console.log('hello jason');
}
function WrapperHello(fn) {
return function() {
console.log('before say hello');
fn();
console.log('after say hello');
}
}
// hello 这时候等于 WrapperHello函数中返回的 匿名函数
// 在设计模式中这种操作叫做 装饰器模式
// 高阶组件也是这种操作--把一个组件传入,再返回一个新的组件
hello = WrapperHello(hello)
hello()
 
【react中的高阶组件】--HOC   组件就是一个函数
 
存在两种高阶组件: 
1.属性代理---主要进行组件的复用
2.反向集成---主要进行渲染的劫持
 
 
属性代理的典型例子:
 
class Hello extends React.Component {
render() {
return <h4>hello Jason</h4>
}
}
function WrapperHello(Comp) {
class WrapComp extends React.Component {
render() {
return (
<div>
<p>这是react高阶组件特有的元素</p>
<Comp {...this.props}></Comp>
</div>
)
}
}
return WrapComp;
}
Hello = WrapperHello(Hello)

还可以写成装饰器的模式,装饰器就是一个典型的属性代理高阶组件

function WrapperHello(Comp) {
class WrapComp extends React.Component {
render() {
return (
<div>
<p>这是react高阶组件特有的元素</p>
<Comp {...this.props}></Comp>
</div>
)
}
}
return WrapComp;
}
@WrapperHello
class Hello extends React.Component {
render() {
return <h4>hello Jason</h4>
}
}

反向集成: 组件和包装组件之间的关系是继承关系而不是代理的方式,可以修改原组件的生命周期,渲染流程和业务逻辑

function WrapperHello(Comp) {
class WrapComp extends Comp {
componentDidMount() {
console.log('反向代理高阶组件新增的生命周期,加载完成')
}
render() {
return <Comp {...this.props}></Comp>
}
}
return WrapComp;
}
@WrapperHello
class Hello extends React.Component {
componentDidMount() {
console.log('组件加载完成')
}
render() {
return <h4>hello Jason</h4>
}
}
控制台输出:
 
组件加载完成
反向代理高阶组件新增的生命周期,加载完成
 
希望对需要理解react高阶组件的人给予帮助~
 
 

react高阶组件的理解的更多相关文章

  1. react 高阶组件的 理解和应用

    高阶组件是什么东西 简单的理解是:一个包装了另一个基础组件的组件.(相对高阶组件来说,我习惯把被包装的组件称为基础组件) 注意:这里说的是包装,可以理解成包裹和组装: 具体的是高阶组件的两种形式吧: ...

  2. 函数式编程与React高阶组件

    相信不少看过一些框架或者是类库的人都有印象,一个函数叫什么creator或者是什么什么createToFuntion,总是接收一个函数,来返回另一个函数.这是一个高阶函数,它可以接收函数可以当参数,也 ...

  3. 聊聊React高阶组件(Higher-Order Components)

    使用 react已经有不短的时间了,最近看到关于 react高阶组件的一篇文章,看了之后顿时眼前一亮,对于我这种还在新手村晃荡.一切朝着打怪升级看齐的小喽啰来说,像这种难度不是太高同时门槛也不是那么低 ...

  4. 当初要是看了这篇,React高阶组件早会了

    当初要是看了这篇,React高阶组件早会了. 概况: 什么是高阶组件? 高阶部件是一种用于复用组件逻辑的高级技术,它并不是 React API的一部分,而是从React 演化而来的一种模式. 具体地说 ...

  5. React高阶组件学习笔记

    高阶函数的基本概念: 函数可以作为参数被传递,函数可以作为函数值输出. 高阶组件基本概念: 高阶组件就说接受一个组件作为参数,并返回一个新组件的函数. 为什么需要高阶组件 多个组件都需要某个相同的功能 ...

  6. 利用 React 高阶组件实现一个面包屑导航

    什么是 React 高阶组件 React 高阶组件就是以高阶函数的方式包裹需要修饰的 React 组件,并返回处理完成后的 React 组件.React 高阶组件在 React 生态中使用的非常频繁, ...

  7. react高阶组件的一些运用

    今天学习了react高阶组件,刚接触react学习起来还是比较困难,和大家分享一下今天学习的知识吧,另外缺少的地方欢迎补充哈哈 高阶组件(Higher Order Components,简称:HOC) ...

  8. React 之 高阶组件的理解

    1.基本概念 高阶组件是参数为组件,返回值为新组件的函数. 2.举例说明 ① 装饰工厂模式 组件是 react 中的基本单元,组件中通常有一些逻辑(非渲染)需要复用处理.这里我们可以用高阶组件对组件内 ...

  9. React高阶组件 和 Render Props

    高阶组件 本质 本质是函数,将组件作为接收参数,返回一个新的组件.HOC本身不是React API,是一种基于React组合的特而形成的设计模式. 解决的问题(作用) 一句话概括:功能的复用,减少代码 ...

随机推荐

  1. Advice from an Old Programmer

    You’ve finished this book and have decided to continue with programming. Maybe it will be a career f ...

  2. 第一天:javascript实现界面运算及循环语句跳转语句

    文档位置:untitled3(c:\user\dell\WebstormProjects\untitled3\testjstry0.html) 知识点1: 1.新创建html文件,编辑文档如下: &l ...

  3. Linux 安装JavaEE环境之Tomcat安装笔记

    1.先用xftp将tomcat的压缩包上传到 /opt/ 2.在/usr/local/下使用命令mkdir tomcat 创建tomcat目录 将apache-tomcat-7.0.70.tar.gz ...

  4. 微信赌场——H5棋牌游戏渗透之旅

    i春秋作家:F0rmat 0x01 前言 本来不想发的,涉及太多利益了,这些棋牌游戏的源码最高能卖到几万.开发起来不比一个商场程序难.最近又太忙了,没时间去做代码审计的文章了,但一不小心又抢了个运气王 ...

  5. Flash 0day漏洞(CVE-2018-4878)复现

    该漏洞影响 Flash Player 当前最新版本28.0.0.137以及之前的所有版本,而Adobe公司计划在当地时间2月5日紧急发布更新来修复此漏洞. 本文作者:i春秋作家——F0rmat 前言 ...

  6. tkinter的grid布局中合并单元格

    rowspan  合并多行,比如:Label(root,text="table",width=10,height=2,),grid(row=0,column=0,rowspan=2 ...

  7. [EXP]WordPress Core 5.0 - Remote Code Execution

    var wpnonce = ''; var ajaxnonce = ''; var wp_attached_file = ''; var imgurl = ''; var postajaxdata = ...

  8. 李航统计学习方法——算法2k近邻法

    2.4.1 构造kd树 给定一个二维空间数据集,T={(2,3),(5,4),(9,6)(4,7),(8,1),(7,2)} ,构造的kd树见下图 2.4.2 kd树最近邻搜索算法 三.实现算法 下面 ...

  9. MySQL 5.5主从复制(Replication)

    简介 MySQL的主从复制(Replication),可以保持两台MySQL数据库的内容一致.因为其同步过程是异步的,所以备份数据库上做任何操作,都不会影响主数据库的性能.对游戏后台数据库而言,这是一 ...

  10. JDK中线程组ThreadGroup

    如果线程有100条...分散的不好管理... 线程同样可以分组ThreadGroup类. 线程组表示一个线程的集合.此外,线程组也可以包含其他线程组.线程组构成一棵树,在树中,除了初始线程组外,每个线 ...