react高阶组件
高阶组件
为了提高组件复用性,在react中就有了HOC(Higher-Order Component)的概念。所谓的高阶组件,其本质依旧是组件,只是它返回另外一个组件,产生新的组件可以对属性进行包装,也可以重写部分生命周期。
首先看一下简单的例子:在components文件夹下新建Hoc.js组件文件,并在index.js中引入该组件。
Hoc.js
import React, { Component } from "react";
function test(props){
return (
<div>{props.stage} - {props.name}</div>
)
}
const withName = Comp => {
return props => <Comp {...props} name="高阶组件试用" />
}
export default withName(test)
index.js



上面例子中的widthName组件就是一个高阶组件,接收了一个组件,为该组件传递一个name参数后,返回扩展以后的组件,这就是高阶组件的用法。
重写生命周期
当我们需要在高阶组件的某个生命周期里面获取数据或者做其他的操作的时候,可以使用高阶组件重写生命周期。
Hoc.js
import React, { Component } from "react";
function test(props){
return (
<div>{props.stage} - {props.name}</div>
)
}
const withName = Comp => {
class NewComponent extends Component{
componentDidMount(){
console.log('高阶组件重写生命周期');
}
render(){
return <Comp {...this.props} name="高阶组件试用" />
}
}
return NewComponent
}
export default withName(test)

高阶组件链式调用
import React, { Component } from "react";
function test(props){
return (
<div>{props.stage} - {props.name}</div>
)
}
const withName = Comp => {
class NewComponent extends Component{
componentDidMount(){
console.log('高阶组件重写生命周期');
}
render(){
return <Comp {...this.props} name="高阶组件试用" />
}
}
return NewComponent
}
const widthLog = Comp => {
console.log(Comp.name + '渲染了');
return props => <Comp {...props} />
}
export default widthLog(withName(test))

高阶组件装饰器写法
在上面的高阶组件链式调用的时候,我们使用的嵌套的写法,这种写法很不直观,因此可以借助ES7里面的装饰器来处理这种问题。
首先,需要在项目根目录执行安装命令:
npm install --save-dev babel-plugin-transform-decorators-legacy
其次,修改config-overrides.js

然后,重启项目后改造上面的高阶组件:
1,将连个高阶组件移动到需要改造的test组件上面;
2,在需要改造的test组件前面依次调用两个高阶组件;
3,将需要改造的test组件由函数组件改为class类组件;
import React, { Component } from "react";
const withName = Comp => {
class NewComponent extends Component{
componentDidMount(){
console.log('高阶组件重写生命周期');
}
render(){
return <Comp {...this.props} name="高阶组件试用" />
}
}
return NewComponent
}
const withLog = Comp => {
console.log(Comp.name + '渲染了');
return props => <Comp {...props} />
};
@withName
@withLog
class test extends Component{
render(){
return (
<div>{this.props.stage} - {this.props.name}</div>
)
}
}
export default test

react高阶组件的更多相关文章
- 聊聊React高阶组件(Higher-Order Components)
使用 react已经有不短的时间了,最近看到关于 react高阶组件的一篇文章,看了之后顿时眼前一亮,对于我这种还在新手村晃荡.一切朝着打怪升级看齐的小喽啰来说,像这种难度不是太高同时门槛也不是那么低 ...
- 当初要是看了这篇,React高阶组件早会了
当初要是看了这篇,React高阶组件早会了. 概况: 什么是高阶组件? 高阶部件是一种用于复用组件逻辑的高级技术,它并不是 React API的一部分,而是从React 演化而来的一种模式. 具体地说 ...
- react高阶组件的理解
[高阶组件和函数式编程] function hello() { console.log('hello jason'); } function WrapperHello(fn) { return fun ...
- 函数式编程与React高阶组件
相信不少看过一些框架或者是类库的人都有印象,一个函数叫什么creator或者是什么什么createToFuntion,总是接收一个函数,来返回另一个函数.这是一个高阶函数,它可以接收函数可以当参数,也 ...
- React高阶组件学习笔记
高阶函数的基本概念: 函数可以作为参数被传递,函数可以作为函数值输出. 高阶组件基本概念: 高阶组件就说接受一个组件作为参数,并返回一个新组件的函数. 为什么需要高阶组件 多个组件都需要某个相同的功能 ...
- 利用 React 高阶组件实现一个面包屑导航
什么是 React 高阶组件 React 高阶组件就是以高阶函数的方式包裹需要修饰的 React 组件,并返回处理完成后的 React 组件.React 高阶组件在 React 生态中使用的非常频繁, ...
- react高阶组件的一些运用
今天学习了react高阶组件,刚接触react学习起来还是比较困难,和大家分享一下今天学习的知识吧,另外缺少的地方欢迎补充哈哈 高阶组件(Higher Order Components,简称:HOC) ...
- React——高阶组件
1.在React中higher-order component (HOC)是一种重用组件逻辑的高级技术.HOC不是React API中的一部分.HOC是一个函数,该函数接收一个组件并且返回一个新组件. ...
- react 高阶组件的 理解和应用
高阶组件是什么东西 简单的理解是:一个包装了另一个基础组件的组件.(相对高阶组件来说,我习惯把被包装的组件称为基础组件) 注意:这里说的是包装,可以理解成包裹和组装: 具体的是高阶组件的两种形式吧: ...
- react高阶组件的使用
为了提高代码的复用在react中我们可以使用高阶组件 1.添加高阶组件 高阶组件主要代码模板HOC.js export default (WrappedComponent) => { retur ...
随机推荐
- [spring源码] 小白级别的源码解析(一)
一直都在用spring,但是每次一遇到spring深入的问题,就是比较懵的状态.最近花了段时间学习了一下spring源码. 1,spring版本介绍 虽然工作中,一直在用到spring,可能有时候,并 ...
- 在win上配置linux虚拟机图解
首先,先下载安装vmware,cpu的类型不支持AMD. 一直点下一步完成安装.
- 菜鸟脱壳之脱壳的基础知识(四)——利用ESP定律来寻找OEP
.上节说的是单步跟踪法,这节讲的是利用堆栈平衡(ESP定律)来进行脱壳!想必大家都听说过ESP定律这个大名吧!ESP定律运用的就是堆栈平衡原理!一般的加壳软件在执行时,首先要初始化,保存环境(保存各个 ...
- STATA一小步 我的一大步
第一次用STATA,以前一直搞SPSS,简直是生产力革命啊. 记下写的第一个命令 也是实现了一个probit回归 clear cd C:\Users\Qian\Desktop\1 insheet us ...
- 第8天【文件系统挂载、ext文件系统及read命令、Linux RAID、lvm应用】
文件系统挂载与管理工具(01)_recv 文件系统管理: 将额外文件系统与根文件系统某现存的目录建立关联关系,进而使得此目录作为其他文件访问入口的行成为挂载: 解除此关联关系的过程 吧设备关联挂载点: ...
- java通过StringToKenizer获取字符串中的单词根据空格分离-简写版
public class StringToKenizer { public static void main(String[] args) { String strin = "Hello J ...
- 32 C++常见错误集锦
1 下列程序中,K的值为:6 enum { a,b=5,c,d=4,e }k; K=c; 分析:enum中,首元素不赋值的话,默认为0:后一个元素不赋值的话比前一个元素大1. 2 程序运行正常. # ...
- Android : 跟我学Binder --- (5) C++实现
目录: Android : 跟我学Binder --- (1) 什么是Binder IPC?为何要使用Binder机制? Android : 跟我学Binder --- (2) AIDL分析及手动实现 ...
- html/css杂题
1.css选择器:详细(http://www.ruanyifeng.com/blog/2009/03/css_selectors.html) 派生选择器:按标签 类别选择器:按class ID选择器: ...
- php优秀框架codeigniter学习系列——CI_Output类的学习
这篇文章主要介绍CI核心框架工具类CI_Output. 根据CI文档自己的定义,这个类主要就是生成返回的页面给浏览器.以下选取类中的重点方法进行说明. __construct() 在构造函数中,主要确 ...