React 高阶组件

embedded/2024/10/11 4:49:01/

高阶组件(Higher-Order Component,简称 HOC)是 React 中的一种设计模式,它是一个函数,接受一个组件作为参数,并返回一个新的组件。高阶组件可以用于抽象和重用组件之间的通用逻辑,从而提高代码的可重用性和可维护性。

高阶组件的主要特点如下:

  • 高阶组件是一个函数,而不是一个组件。
  • 高阶组件接受一个组件作为参数,并返回一个新的组件。
  • 高阶组件通过包裹传入的组件,可以在不修改原组件的情况下,对其进行功能增强或修改行为。
  • 高阶组件可以访问并操作被包裹组件的 props、state 和生命周期方法。

以下是一个 TypeScript 实现的高阶组件,当被点击时会上报操作行为,并且保留用户自定义的点击行为,同时允许通过 props 传递上报的内容

import React from 'react'
import { KatButton, KatIcon, KatLink } from '@amzn/katal-react'
import { ClickMetricEnum } from 'src/config/metrics'
import { clickTracker } from 'src/utils/metricUtils'export interface ClickTrackingProps {trackingId: stringbuttonClicked: ClickMetricEnumtrackingWorkflow: stringvendorGroupId?: stringvendorCode?: stringtrackingRemark?: string
}const trackClickEvent = (props: ClickTrackingProps) => {clickTracker(props.trackingId,props.buttonClicked,props.trackingWorkflow,props.vendorGroupId,props.vendorCode,props.trackingRemark)
}// HOC to add click event reporting
function withClickTracking<P extends object>(WrappedComponent: React.ComponentType<P>
): React.FC<P & ClickTrackingProps> {const ClickTrackingComponent: React.FC<P & ClickTrackingProps> = props => {const handleClick = (event: React.MouseEvent<HTMLElement>) => {trackClickEvent(props)if ((props as any).onClick) {;(props as any).onClick(event)}}return <WrappedComponent {...props} onClick={handleClick} />}return ClickTrackingComponent
}export const TrackableKatButton = withClickTracking(KatButton)
export const TrackableKatIcon = withClickTracking(KatIcon)
export const TrackableKatLink = withClickTracking(KatLink)

其中clickTracker是其它文件中实现的一个上报函数。


http://www.ppmy.cn/embedded/125710.html

相关文章

使用Conda管理python环境的指南

1. 准备 .yml 文件 确保你有一个定义了 Conda 环境的 .yml 文件。这个文件通常包括环境的依赖和配置设置。文件内容可能如下所示&#xff1a; name: myenv channels:- defaults dependencies:- python3.8- numpy- pandas- scipy- pip- pip:- torch- torchvision- torchaudio2…

SAP_FI_表ACDOCA取代的表

在 SAP S/4HANA 系统中&#xff0c;ACDOCA&#xff08;通用分录表&#xff0c;Universal Journal&#xff09;引入了全新的数据结构&#xff0c;取代了原先 ERP 系统中多个财务和控制模块的表。ACDOCA 通过一个单一表格整合了财务会计&#xff08;FI&#xff09;和管理会计&…

新电脑 Windows 系统初始配置

文章目录 前言1 前置配置2 安装软件2.1 通讯工具2.2 后端开发工具2.3 硬件开发工具2.4 前端开发工具2.4 其它工具 3 Windows 11 优化4 写在最后 前言 分区&#xff08;个人习惯&#xff09;&#xff1a;1TB SSD 分为 2 个分区&#xff0c;一个 256GB 分区为系统盘&#xff0c;剩…

萱仔求职复习系列——2 Linux的常用方法(包含基础进阶高级操作)

由于最近接了一个笔试&#xff0c;发现笔试可能涉及到Linux&#xff0c;我准备临时抱佛脚一下赶紧复习一下Linux的用法哈哈。Linux 的基础用法包含文件系统操作、权限管理、网络配置、进程管理等基本命令&#xff1b;进阶操作包括网络调试、包管理、服务管理和用户管理等&#…

Hive数仓操作(十三)

一、JSON 数据 JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;在不同的编程语言之间进行数据传输时非常通用和常用。JSON 格式简单直观&#xff0c;易于阅读和编写&#xff0c;并且可以被大多数编程语言轻松解析和生成。 1.…

大语言模型简介

大语言模型简介 今天我们来聊一聊大语言模型。大语言模型是一种能够处理和理解自然语言的深度学习模型&#xff0c;专门设计用来理解、生成和处理自然语言。 人工智能、机器学习和深度学习 想要理解什么是大语言模型&#xff0c;我们首先要弄清楚几个经常容易被搞混的概念&a…

初级前端面试常见问题(上岸某公司)

一、HTML5CSS篇 1.css隐藏元素方法 display:none position:absolute 移除到可视区域之外 visibility:hidden z-index:负值&#xff0c;用其他元素遮盖 opacity:0 clip/clip-…

【JDK17 | 7】Java 17 深入剖析:基础概述与新特性实战

引言 Java 自 1995 年发布以来,经过多次版本迭代,已成为企业级应用开发的首选语言。随着 Java 17 的发布,作为长期支持(LTS)版本,它带来了许多新特性和增强功能,极大地提升了开发效率和代码可读性。本篇文章将详细介绍 Java 17 的重要概念、安装步骤以及一些核心新特性…