react 高阶组件详解

react 高阶组件详解1 高阶组件是什么高阶组件是包装了另外一个 React 组件的 React 组件 它可以大幅度的简化代码量 使我们更多的去复用代码 2 高阶组件用途 1 最常用之属性代理 子组件 importReact Component from react importfirstH first hoc classTestext constructor super this st

1、高阶组件是什么

高阶组件是一个函数,但 参数 和 返回值 为 组件。 高阶组件是包装了另外一个 React 组件的 React 组件、它可以大幅度的简化代码量、使我们更多的去复用代码; 高阶组件可以解决组件冗余的问题,可以使多个组件具有相同或类似的方法。

2、高阶组件用途

1): 最常用之属性代理:

/* eslint-disable*/ import React, { createRef, Component } from 'react'; const firstHoc = (WrappedComponent) => { return class extends Component { get hocComponent() { return this.hocRef.current; } constructor(props) { super(props); this.state = { userId: '', }; this.logState = this.logState.bind(this); this.hocRef = createRef(); } componentWillMount() { const userId = localStorage.getItem('userId'); this.setState({ userId, }); } logState() { console.log('==============>', this); console.log('====>', this.hocComponent.state); } render() { const { userId } = this.state; const hocProps = { logState: this.logState, userId, }; return 
     ; } }; }; class Test extends Component { constructor() { super(); this.state = { hocTest: '我是hocTest', }; } handleView = () => { console.log(this.props.userId); this.props.logState(); }; render() { return ( 
     
{ this.handleView(); }} > Test
); } } export default firstHoc(Test);

以上例子是导出了 hoc 组件中的 logState 通过 firstHoc 包裹的组件、都可以直接调用 this.props.logState 去打印自身组件的 state 数据

即抽取一些可复用的方法,或属性导出,在子组件内通过 this.porps 访问

2): 抽离 state:

/* eslint-disable max-classes-per-file */ // 普通组件Login import React, { Component } from 'react'; const formCreate = (WrappedComponent) => class extends Component { constructor() { super(); this.state = { fields: {}, }; } changeFiled = (e, key) => { const { fields } = this.state; fields[key] = e.target.value; this.setState({ fields, }); }; handleSubmit = () => { console.log(this.state.fields); }; render() { const props = { ...this.props, handleSubmit: this.handleSubmit, changeFiled: this.changeFiled, }; return 
     ; } }; class Login extends Component { render() { return ( 
     
this.props.changeFiled(e, 'username')} />
this.props.changeFiled(e, 'password')} />
提交
other content
); } } export default formCreate(Login);

把子组件中重复功能(如一些简单的受控表单、使用 state 控制输入 value)的状态、及设置 state 抽离在高阶组件中统一管理! 最后在子组件中通过 this.porps.methodsName 获取

3): 统一容器:

const HocTest = (WrappedComponent) => class extends Component { render() { return ( 
     
{ background: '#fff' }}> 头部 尾部
); } };

可以在高阶组件中套一层 div 做一些公用样式… 其实还有很多作用

4): 反向继承(渲染劫持):

const withLoading(WrappedComponent) { return class extends WrappedComponent { render() { if(this.props.isLoading) { return 
     ; } else { return super.render(); } } }; } 

在 hoc 中直接继承传进来的组件(wrapComponent),在 render 中做一些判断,如是否处于 loading 状态,渲染 loading 或者直接渲染原来内容 super.render();

其实在工作中我们能遇到的使用高阶组件情景很多,就看我们怎么使用;






版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/220250.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午8:54
下一篇 2026年3月17日 下午8:54


相关推荐

  • 加壳工具对比

    加壳工具对比哪个最难脱,哪个最难破? 哪个激活成功教程平均耗时最久? 最贵的DNGuard,企业版5k+,走遍天下无敌手? 多选投票:(最多可选3项),共有119人参与投票投票已经结束1.DNGuard企业版3.72 51.09%(70) 2..NETReactor5.0 22.63%(31) 3….

    2022年6月27日
    30
  • vba中find的用法_vba筛选符合条件的数据到数组

    vba中find的用法_vba筛选符合条件的数据到数组                 

    2022年10月14日
    3
  • 二进制补码的理解_25的八位原码反码补码

    二进制补码的理解_25的八位原码反码补码正数的原码=反码=补码。负数的原码、反码、补码关系为:     原码= 正数的原码符号位变为1,    反码= 正数的原码取反    补码= 正数的原码取反加1。 补码主要为了计算机进行减法运算。参考1:https://www.cnblogs.com/guanjianzhuo/p/6017291.html参考2:https://www.jia…

    2022年10月21日
    5
  • [CGAL] CGAL的编译与使用

    [CGAL] CGAL的编译与使用文章目录前言 CGAL5 0 2 Windows VS17 方法一 用 CGAL 安装器安装安装 Boost 安装 CGAL 安装 Qt 编译示例报错处理在 cmake 配置时报错 未能找到 Boost 方法二 用 Vcpkg 库管理器安装安装 CGAL 库编译示例前言 CGAL 只是一个头文件库 从 5 0 版本开始 这意味着 CGAL 无需编译 只需安装好 CGAL 的依赖项即可 CGAL 主要依赖项是 boost 如果需要使用 CGAL 的可视化功能 则还需要 Qt 库 CGAL5 0 2 Windows VS17 方法一 用 CGAL 安装器安装此示例也安

    2026年3月17日
    2
  • OPC 协议一点点总结

    OPC 协议一点点总结目录一 OPC 协议规范二 OPC 服务器三 OPC 服务器之间的通信四 OPC 三类对象 OPC 基于微软的 COM DCOM 技术来进行数据交换 只能安装在 Windows 系统 采用的是客户端 服务器模式 通信的发起端是客户端 可以读写服务器数据 硬件厂商只需要提供硬件设备的驱动程序 并且提供标准的 OPC 协议规范的 OPC 服务器让客户端来通过软件的方式来访问硬件 实现软件和硬件的通信 一 OPC 协议规范 DA DataAccess 规范 实时数据 访问数据主要采用的协议规范 A amp

    2026年3月17日
    2
  • 什么是LoRaWAN

    什么是LoRaWAN1 技术框图如图所示 LoRa 是物理 PHY 层 即用于创建远程通信链路的无线调制 LoRaWAN 是一种开放式网络协议 可提供由 LoRa 联盟标准化和维护的安全双向通信 移动性和本地化服务 2LoRaWAN 网络下图是端到端的典型 LoRaWAN 网络实现 主要包括 4 个部分 终端设备 LoRaWAN 网关 网络服务器 应用服务器 2 1 终端设备支持 LoRaWAN 的终端设备是使用 LoRa 调制通过 RF 连接到 LoRaWAN 网络的传感器或设备 在大多数应用中 终端设备是

    2026年3月26日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号