当前位置:首页 > React

如何用ts写react的类组件

2026-01-26 07:24:09React

使用 TypeScript 编写 React 类组件

在 TypeScript 中编写 React 类组件需要明确组件的 propsstate 的类型,同时遵循 React 的生命周期方法。以下是具体实现方式:

定义组件 Props 和 State 类型

使用接口或类型别名定义 propsstate 的结构,确保类型安全。

interface MyComponentProps {
  title: string;
  initialCount?: number; // 可选属性
}

interface MyComponentState {
  count: number;
  isActive: boolean;
}

创建类组件

通过继承 React.Component 并传入 propsstate 的类型泛型来创建组件。

class MyComponent extends React.Component<MyComponentProps, MyComponentState> {
  // 初始化 state
  state: MyComponentState = {
    count: this.props.initialCount || 0,
    isActive: false,
  };

  // 生命周期方法(可选)
  componentDidMount() {
    console.log('Component mounted');
  }

  // 事件处理方法
  handleClick = () => {
    this.setState((prevState) => ({
      count: prevState.count + 1,
      isActive: !prevState.isActive,
    }));
  };

  // 渲染方法
  render() {
    const { title } = this.props;
    const { count, isActive } = this.state;

    return (
      <div>
        <h1>{title}</h1>
        <p>Count: {count}</p>
        <p>Status: {isActive ? 'Active' : 'Inactive'}</p>
        <button onClick={this.handleClick}>Increment</button>
      </div>
    );
  }
}

默认 Props 设置

通过静态属性 defaultProps 定义默认值,需在类外部声明类型。

MyComponent.defaultProps = {
  initialCount: 10,
};

使用组件

在父组件中传递类型化的 props,TypeScript 会检查属性是否符合定义。

const App = () => {
  return <MyComponent title="Counter App" initialCount={5} />;
};

处理事件类型

为事件处理函数明确指定事件类型,例如 React.MouseEvent

handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
  this.setState({ inputValue: e.target.value });
};

完整示例

结合上述内容,以下是一个完整的计数器组件示例:

import React from 'react';

interface CounterProps {
  initialValue?: number;
}

interface CounterState {
  count: number;
}

class Counter extends React.Component<CounterProps, CounterState> {
  state: CounterState = {
    count: this.props.initialValue || 0,
  };

  increment = () => {
    this.setState({ count: this.state.count + 1 });
  };

  render() {
    return (
      <div>
        <p>Current Count: {this.state.count}</p>
        <button onClick={this.increment}>Increment</button>
      </div>
    );
  }
}

Counter.defaultProps = {
  initialValue: 0,
};

export default Counter;

注意事项

  • 泛型参数顺序React.Component<P, S>Pprops 类型,Sstate 类型。
  • 状态初始化:直接通过 state 属性初始化,而非在构造函数中。
  • 事件绑定:使用箭头函数或手动绑定 this,避免方法中的 this 指向问题。

通过以上方式,可以充分利用 TypeScript 的类型检查能力,提升 React 类组件的代码健壮性。

如何用ts写react的类组件

标签: 如何用组件
分享给朋友:

相关文章

vue实现组件循环图片

vue实现组件循环图片

Vue 中实现组件循环图片的方法 在 Vue 中,可以通过 v-for 指令循环渲染图片组件。假设有一组图片数据需要循环展示,可以采用以下方式: 数据准备 在组件的 data 或 props 中定…

实现vue组件

实现vue组件

Vue 组件的基本实现 Vue 组件是 Vue.js 的核心特性之一,允许将 UI 拆分为独立、可复用的模块。以下是实现 Vue 组件的几种方式: 单文件组件 (SFC) 使用 .vue 文件格式,…

vue实现组件循环图片

vue实现组件循环图片

Vue 实现组件循环图片的方法 在 Vue 中实现组件循环图片通常可以通过 v-for 指令结合动态数据绑定完成。以下是几种常见的实现方式: 使用静态图片路径数组 假设有一组本地图片路径,可以通过…

vue实现下拉刷新组件

vue实现下拉刷新组件

Vue 下拉刷新组件实现 核心思路 通过监听 touch 事件计算滑动距离,结合 CSS 过渡动画实现下拉效果,触发刷新回调。 基础实现步骤 监听 touch 事件 在组件 mounted 阶段绑定…

uniapp 分页组件

uniapp 分页组件

uniapp 分页组件实现方法 在uniapp中实现分页功能,可以通过自定义组件或使用第三方组件库完成。以下是几种常见实现方式: 自定义分页组件 创建一个名为uni-pagination的组件,模…

组件elementui

组件elementui

ElementUI 简介 ElementUI 是一套基于 Vue.js 的桌面端组件库,由饿了么前端团队开发并开源。它提供了丰富的 UI 组件(如按钮、表单、表格等),适合快速构建企业级中后台产品。…