当前位置:首页 > 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 中编写类型安全的高阶组件。

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

相关文章

如何用vue实现轮播

如何用vue实现轮播

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

如何用react做项目

如何用react做项目

创建React项目 使用官方工具create-react-app快速初始化项目。确保已安装Node.js(版本≥14.0.0)和npm/yarn。 运行以下命令生成项目结构: npx creat…

如何用vscode 启动react项目

如何用vscode 启动react项目

安装必要工具 确保已安装Node.js(包含npm或yarn),可在终端运行node -v和npm -v检查版本。未安装需从Node.js官网下载。 创建React项目 打开VSCode终端(快捷键…

如何用ts重构react项目

如何用ts重构react项目

使用 TypeScript 重构 React 项目的步骤 安装 TypeScript 及相关依赖 在项目中安装 TypeScript 和 React 的类型定义文件: npm install -…

react中高阶组件如何获取dom

react中高阶组件如何获取dom

高阶组件获取 DOM 的方法 在 React 中,高阶组件(HOC)可以通过 ref 转发或直接使用 React.forwardRef 来获取被包裹组件的 DOM 节点。以下是具体实现方式: 方法一…