React+Typescript 状态管理

好 本文 我们来说说状态管理 也就是我们的 state

我们直接顺便写一个组件 参考代码如下

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

interface IProps {
    title: string,
    age: number
}

interface IState {
    count:number
}

export default class hello extends React.Component<IProps,IState> {

    public constructor(props:any){
        super(props);
    }

    public readonly state: Readonly<IState> = {
        count: 520
    }


    public render() {
        return (
            <div>
                <div>{ this.state.count }</div>
            </div>
        )
    }
}

IProps 我们上文讲过 就是限制props 父组件传过来的值的

重点是IState 其实接口泛型都是一样的 创建一个接口 定义好名字 然后 声明里面有哪些字段 都是什么类型

然后 上文中 我们Component 传的是IProps 和 any 其实第二个要放state的限制规范

当然 如果你说 我们这个组件 如果不需要props 父组件不传值过来 可以这样

typescript 复制代码
Component<any,IState>

如果说 我们这个组件不需要声明state 不用这里面的变量

可以这样

typescript 复制代码
Component<IProps,any> {

就是 不需要就用 any

然后 我们根据IState接口的规范 创建了state

里面按接口规定 定义了一个数字类型的count

readonly 设置为只读属性

启动项目 效果是这样

this.state.count被成功输出

然后 就还是修改state中数据

我们先将组件改成这样

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

interface IProps {
    title: string,
    age: number
}

interface IState {
    count:number
}

export default class hello extends React.Component<IProps,IState> {

    public constructor(props:any){
        super(props);
    }

    public readonly state: Readonly<IState> = {
        count: 520
    }

    clickHide(){
        this.setState({
            count: 200
        })
    }


    public render() {
        return (
            <div>
                <div>{ this.state.count }</div>
                <button onClick = { this.clickHide }>修改</button>
            </div>
        )
    }
}

我们写了一个按钮 点击触发clickHide

clickHide中我们用了以前的setState去修改state中的count

运行项目之后 一切正常 但当我们触发事件

这里就会直接报错了

我们直接将代码改成这样

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

interface IProps {
    title: string,
    age: number
}

interface IState {
    count:number
}

export default class hello extends React.Component<IProps,IState> {

    public readonly state: Readonly<IState> = {
        count: 520
    }
    
    public constructor(props:IProps){
        super(props);
        this.clickHide = this.clickHide.bind(this);
    }

    public clickHide(){
        this.setState({
            count: 200
        })
    }


    public render() {
        return (
            <div>
                <div>{ this.state.count }</div>
                <button onClick = { this.clickHide }>修改</button>
            </div>
        )
    }
}

首先 其实就是 用bind 改变一下this的指向

我们再次点击这里 修改它就可以了

最后来和大家说一下这个readonly只读属性声明state的好处

例如 我们修改数据这样写

它可以阻止开发人员直接操作state中的字段 让代码更规范一些

相关推荐
默_笙2 小时前
🚦 请三个 AI 考官给 RAG 打分:量化评估实战(下)
前端·javascript
阿坨2 小时前
灵感闪存卡:一款 Tampermonkey用户脚本
javascript·tampermonkey
朝朝辞暮i4 小时前
C++ 第 25 课:getter / setter + this
java·javascript·c++
蜗牛互联网5 小时前
Python接入Gemini 3.8 Flash实现票据视觉抽取与规则校验
java·javascript·网络·人工智能·python
xieter6 小时前
【技术精选】深入浅出现代前端渲染与性能优化实践指南 (2026-10-04)
前端·javascript
xieter6 小时前
【硬核实战】TypeScript Compiler API: Preserving Child Node Narrowing in Reusable Type Guards 🔧 (2026-10-03)
前端·javascript
xieter6 小时前
【硬核实战】React 19 useFormStatus Returning False? I Built a SubmitButton That Fixes It (2026-10-03)
前端·javascript
paopaokaka_luck8 小时前
非遗文物数字化小程序(AI非遗问答、ONNX图像识别、协同过滤推荐、ECharts数据分析、非遗知识浏览与互动、文创商城订单闭环、文化活动报名签到、社区交流)
javascript·spring boot·mysql·数据分析·echarts·mybatis
Highcharts.js8 小时前
图表开发实战总结| 7 条“黄金法则”与“性能铁律”
前端·javascript·vue.js·编辑器·时序数据库·highcharts
Helix2508 小时前
Electron、WebView 框架与 HTA 对比:桌面应用选型、安全性与现代替代方案
前端·javascript·electron·webview·vbscript·hta·本地html应用