当前位置:首页 > React

react如何用ts写高阶组件

2026-01-25 20:52:00React

使用 TypeScript 编写 React 高阶组件(HOC)

基本高阶组件结构

高阶组件(HOC)是一个函数,接收一个组件并返回一个新的组件。以下是 TypeScript 的基本实现方式:

import React, { ComponentType } from 'react';

function withHOC<T>(WrappedComponent: ComponentType<T>) {
  return function (props: T) {
    return <WrappedComponent {...props} />;
  };
}

添加额外属性

如果需要为高阶组件添加额外属性,可以通过泛型扩展:

interface WithExtraProps {
  extraProp: string;
}

function withExtraProps<T>(WrappedComponent: ComponentType<T>) {
  return function (props: T & WithExtraProps) {
    return <WrappedComponent {...props} />;
  };
}

注入 Props

高阶组件可以通过注入新的 props 来增强组件功能:

react如何用ts写高阶组件

function withInjectedProps<T>(WrappedComponent: ComponentType<T>) {
  return function (props: Omit<T, 'injectedProp'>) {
    const injectedProps = {
      injectedProp: 'This is injected',
    };
    return <WrappedComponent {...(props as T)} {...injectedProps} />;
  };
}

处理组件名称

为了在调试工具中显示正确的组件名称,可以设置 displayName

function withDisplayName<T>(WrappedComponent: ComponentType<T>) {
  const ComponentWithDisplayName = (props: T) => {
    return <WrappedComponent {...props} />;
  };
  ComponentWithDisplayName.displayName = `WithDisplayName(${WrappedComponent.displayName || WrappedComponent.name})`;
  return ComponentWithDisplayName;
}

使用高阶组件

使用时,通过泛型指定组件 props 类型:

react如何用ts写高阶组件

interface MyComponentProps {
  name: string;
}

const MyComponent: React.FC<MyComponentProps> = ({ name }) => {
  return <div>{name}</div>;
};

const EnhancedComponent = withHOC(MyComponent);

高阶组件与 Ref

如果需要传递 ref,可以使用 forwardRef

function withRef<T, P>(WrappedComponent: ComponentType<T>) {
  return React.forwardRef<P, T>((props, ref) => {
    return <WrappedComponent {...props} ref={ref} />;
  });
}

组合多个高阶组件

可以组合多个高阶组件来增强功能:

const EnhancedComponent = withHOC(withExtraProps(MyComponent));

注意事项

  • 确保正确处理泛型以避免类型错误。
  • 避免直接修改传入的组件,而是通过组合来增强功能。
  • 使用 displayName 提高调试体验。

以上方法可以帮助在 TypeScript 中编写类型安全的高阶组件。

标签: 如何用高阶
分享给朋友:

相关文章

如何用java编程

如何用java编程

Java编程基础指南 环境配置 安装Java开发工具包(JDK),推荐使用最新版本。配置环境变量,确保JAVA_HOME指向JDK安装路径,并将bin目录添加到系统PATH中。验证安装是否成功:…

如何用VUE实现倍速

如何用VUE实现倍速

使用Vue实现视频倍速播放 在Vue中实现视频倍速播放可以通过HTML5的<video>元素和Vue的数据绑定功能来完成。以下是实现方法: 安装Vue 确保项目中已经安装Vue。如果没有…

如何用vue实现轮播

如何用vue实现轮播

使用Vue实现轮播 基础实现(基于原生Vue) 创建轮播组件,通过动态绑定v-for和v-show控制显示当前幻灯片: <template> <div class="caro…

如何用vue实现前端

如何用vue实现前端

Vue.js 前端开发实现方法 环境搭建与项目初始化 安装 Node.js 和 npm/yarn 作为基础环境 使用 Vue CLI 创建项目:vue create project-name 选择预设…

react如何用jq

react如何用jq

在React中使用jQuery React和jQuery可以一起使用,但需要注意两者的DOM操作方式不同。React使用虚拟DOM,而jQuery直接操作真实DOM。混合使用时需谨慎避免冲突。 安装…

如何用react做分页

如何用react做分页

使用 React 实现分页功能 分页是 Web 开发中常见的需求,React 可以通过状态管理和组件化轻松实现分页功能。以下是实现分页的几种方法。 基础分页实现 定义状态 使用 useState…