欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > React 高阶组件

React 高阶组件

2024/10/26 3:39:38 来源:https://blog.csdn.net/winfield821/article/details/142819468  浏览:    关键词:React 高阶组件

高阶组件(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是其它文件中实现的一个上报函数。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com