[React Typescript 2022] Use TypeScript to Type a React Class Component

For older applications, it's likely that you have some Class components. TypeScript works a little differently with these. The React.Component class is a generic class and it takes the props type as its first type argument. We will write out an alias for our props that I'll pass in the type argument space for the class. Child classes can also implement their own various methods for overriding parent methods, we'll also want to explicitly type the props in our constructor.

 

复制代码
import * as React from "react";

interface CounterProps {
    initialCount?: number;
    className?: string;
}
interface CounterState {
    count: number;
}
class Counter extends React.Component<CounterProps, CounterState> {
    state: CounterState = {
        count: this.props.initialCount ?? 0,
    };

    constructor(props: CounterProps) {
        super(props);
        this.increment = this.increment.bind(this);
        this.decrement = this.decrement.bind(this);
    }

    shouldComponentUpdate(nextProps: CounterProps, nextState: CounterState) {
        return shallowCompare(this, nextProps, nextState);
    }

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

    decrement() {
        this.setState(({ count: prevCount }) => ({
            count: prevCount - 1,
        }));
    }

    render() {
        return (
            <div className={this.props.className}>
                <button type="button" onClick={this.decrement} aria-label="Decrement">
                    -
                </button>
                <span>{this.state.count}</span>
                <button type="button" onClick={this.increment} aria-label="Increment">
                    +
                </button>
            </div>
        );
    }
}

export { Counter };
复制代码

 

posted @   Zhentiw  阅读(70)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2020-12-30 [Java] Primitive Stream
2020-12-30 [Java] Stream Intro example
2020-12-30 [Java] Collections Intro example
2018-12-30 [PWA] Disable Text Selection and Touch Callouts in a PWA on iOS
2018-12-30 [PWA] Customize the Splash Screen of a PWA built with create-react-app
2018-12-30 [PWA] Show an Error when a POST or DELETE Fails in an Offline PWA
2015-12-30 [Javascript] Array methods in depth - indexOf
点击右上角即可分享
微信分享提示