React 技术

高阶组件

let Root = props => <div>{props.schoolName}</div>;

如果要在上例的Root组件进行增强怎么办?例如将Root组件的div外部再加入其它div。

let Wrapper = function (Component, props) {return (<div>{props.name}<hr /><Component /></div>
    );
};
let Root = props => <div>{props.name}</div>;

柯里化

import React from "react";
import ReactDom from "react-dom"let Wrapper = function (Component) {function _wrapper (props) {return (<div>{props.name}<hr /><Component /></div>
    );}return _wrapper
};
let Root = props => <div>{props.schoolName}</div>;
let NewComp = Wrapper(Root) // 返回一个包装后的元素
ReactDom.render(<NewComp name="Riper" />, document.getElementById('root'));

简化Wrapper

import React from "react";
import ReactDom from "react-dom"let Wrapper = function (Component) {return  (props) => <div>{props.name}<hr /><Component /></div>
    ;
};
let Root = props => <div>{props.schoolName}</div>;
let NewComp = Wrapper(Root) // 返回一个包装后的元素
ReactDom.render(<NewComp name="Riper" />, document.getElementById('root'));

继续化简

import React from "react";
import ReactDom from "react-dom"let Wrapper =  (Component) => (props) => <div>{props.name}<hr /><Component /></div>

let Root = props => <div>{props.schoolName}</div>;
let NewComp = Wrapper(Root) // 返回一个包装后的元素
ReactDom.render(<NewComp name="Riper" />, document.getElementById('root'));

装饰器

新版ES2016中增加了装饰器的支持,因此可以使用装饰器改造上面的代码

装饰器在ES2016可以装饰类,所以,将Root改写成类

import React from 'react';
import ReactDom from 'react-dom';let Wrapper = Component => props =>(<div>{props.Name}<hr /><Component /></div>);

@Wrapper
class Root extends React.Component {render() {return <div>Root</div>;
    }
}ReactDom.render(<Root Name="Riper" />, document.getElementById('root'));

可以让Root也显示出name属性

import React from 'react';
import ReactDom from 'react-dom';let Wrapper = Component => props =>(<div>{props.Name}<hr /><Component {...props} /></div>);

@Wrapper
class Root extends React.Component {render() {return <div>{this.props.Name}</div>;
    }
}ReactDom.render(<Root Name="Riper" />, document.getElementById('root'));

使用 <Component {...props} /> 相当于给组件增加了属性。

带参装饰器

import React from 'react';
import ReactDom from 'react-dom';let Wrapper = id => Component => props =>(<div id={id}>{props.Name}<hr /><Component {...props} /></div>);

@Wrapper("wrapper")
class Root extends React.Component {render() {return <div>{this.props.Name}</div>;
    }
}ReactDom.render(<Root Name="Riper" />, document.getElementById('root'));

简单改写,就可以得到带参装饰器

如果觉得不好接受,可以先写成原始的形式,熟悉了箭头函数语法后,再改成精简的形式。

转载于:https://www.cnblogs.com/rprp789/p/9991698.html

chapter2.3、react高阶组件,装饰器相关推荐

  1. [react] 高阶组件(HOC)有哪些优点和缺点?

    [react] 高阶组件(HOC)有哪些优点和缺点? HOC 优点 通过传递props去影响内层组件的状态,不直接改变内层组件的状态,降低了耦合度 缺点 组件多层嵌套, 增加复杂度与理解成本 ref隔 ...

  2. 「react进阶」一文吃透React高阶组件(HOC)

    一 前言 React高阶组件(HOC),对于很多react开发者来说并不陌生,它是灵活使用react组件的一种技巧,高阶组件本身不是组件,它是一个参数为组件,返回值也是一个组件的函数.高阶作用用于强化 ...

  3. React高阶组件_阶段1

    react高阶组件_阶段1 作用: 个人总结的高阶组件设计的作用主要有两点, 这里直接使用装饰器方式 非装饰器使用请结合我的博文"react基础梳理_阶段1"中的"自定义 ...

  4. 使用react 高阶组件withRouter

    使用react 高阶组件withRouter withRouter 是一个高阶组件,把 match,location,history 三个对象注入到组件的 props 中.这是一个非常实用的函数 re ...

  5. react 高阶组件

    react 高阶组件 概述 目的:实现状态逻辑复用 采用 包装(装饰)模式,比如说:手机壳 手机:获取保护功能 手机壳:提供保护功能 高阶组件就相当于手机壳,通过包装组件,增强组件功能 思路分析 高阶 ...

  6. react高阶组件和hooks

    1. react高阶组件 1.1 高阶组件的概念 高阶组件(Higher Order Component,简称:HOC ): 是 React 中用于重用组件逻辑的高级技术, 它本身不是react中的组 ...

  7. React高阶组件深入理解

    1. 基本概念 高阶组件是React 中一个很重要且较复杂的概念,高阶组件在很多第三方库(如Redux)中都被经常使用,即使你开发的是普通的业务项目,用好高阶组件也能显著提高你的代码质量. 高阶组件的 ...

  8. react实现汉堡_利用 React 高阶组件实现一个面包屑导航

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

  9. React高阶组件探究

    React高阶组件探究 在使用React构建项目的过程中,经常会碰到在不同的组件中需要用到相同功能的情况.不过我们知道,去这些组件中到处编写同样的代码并不优雅. 在以往,为了解决以上的情况,我们会用到 ...

  10. react组件类型及深入理解react高阶组件

    React中常见的组件类型及分类: 1.展示组件(Presentational component) 与 容器组件(Container component) 2.类组件(Class component ...

最新文章

  1. 建立普通用户信任关系,
  2. UA MATH523A 实分析3 积分理论例题 讨论原函数的连续性
  3. 不同版本GCC编译器之间的切换
  4. x-requested-with 请求头 区分ajax请求还是普通请求
  5. Visual Studio Team System 2008 安装失败
  6. 磁共振立体定向仪行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  7. 计算机工程 目录 2014年第1期 pdf,2013科技核心期刊目录有效期至2014年).pdf
  8. k3修改服务器,金蝶k3客户端修改服务器地址
  9. PR转场预设 放大特效带有重影效果的PR视频转场预设
  10. 个性化不和谐帐户的8种方法
  11. 解决手机QQ或微信已开通邮件提醒,但收到邮件仍不提醒的问题
  12. 回撤率 python_【Python量化】O(n)复杂度实现最大回撤的计算
  13. Java 首字母大写高效方法
  14. 鼠标经过文字显示隐藏图片css样式
  15. BZOJ 1911 (APIO 2010) 特别行动队
  16. 代理的理解(动态代理与静态代理)
  17. q某音乐API接口分析--获取vKey和Sign
  18. 冬季最新流行的室内运动减肥
  19. C语言二叉树叶子节点的求法
  20. 移民去欧洲,选哪个国家好呢?

热门文章

  1. 【数据库】防止SQL注入
  2. JAVA获取系统相关信息
  3. Fast implementation/approximation of pow() function in C/C++
  4. C++ Public, Protected, Private
  5. UA MATH563 概率论的数学基础 中心极限定理14 Kolmogorov maximal inequality
  6. Java虚拟机内存模型初步学习
  7. 洛谷 P4284 [SHOI2014]概率充电器 解题报告
  8. php--理解PHP的依赖注入和laravel的服务容器
  9. 《构建之法》之第8、9、10章读后感
  10. 全面分析 Spring 的编程式事务管理及声明式事务管理(转)