当前位置: 首页 > news >正文

React+Typescript 状态管理

好 本文 我们来说说状态管理 也就是我们的 state
我们直接顺便写一个组件 参考代码如下

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 父组件不传值过来 可以这样

Component<any,IState>

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

Component<IProps,any> {

就是 不需要就用 any
然后 我们根据IState接口的规范 创建了state
里面按接口规定 定义了一个数字类型的count
readonly 设置为只读属性

启动项目 效果是这样
在这里插入图片描述
this.state.count被成功输出

然后 就还是修改state中数据
我们先将组件改成这样

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
运行项目之后 一切正常 但当我们触发事件
这里就会直接报错了
在这里插入图片描述
我们直接将代码改成这样

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中的字段 让代码更规范一些

http://www.lryc.cn/news/132447.html

相关文章:

  • stable diffusion 运行时报错: returned non-zero exit status 1.
  • el-popover弹窗修改三角样式或者位置
  • Linux驱动开发之点亮三盏小灯
  • 【SA8295P 源码分析】71 - QAM8295P 原理图参考设计 之 MIPI DSI 接口硬件原理分析
  • macOS(m1/m2)破解Sublime Text和Navicat16
  • 【排排站:探索数据结构中的队列奇象】
  • Mac OS 中JDK 环境(jdk 1.8.0_831)安装配置、环境变量配置及卸载操作
  • [JAVAee]Tomcat - Servlet
  • MAC钓鱼并Root权限上线CS并权限维持,以及所有的坑如何解决
  • 浅谈OCR中的David Shepard
  • draw.io导出矢量图到word报错text is not svg - cannot display
  • JVM加强
  • 解决Oracle中XML插入数据时的空格问题
  • 微服务中间件--分布式事务
  • 计算机网络(9) --- 数据链路层与MAC帧
  • 【学会动态规划】环绕字符串中唯一的子字符串(25)
  • CNN卷积详解(三)
  • 使用 Amazon Redshift Serverless 和 Toucan 构建数据故事应用程序
  • CentOS 上快速安装包管理工具Conda
  • opencv-手势识别
  • 【SA8295P 源码分析】10 - HQX Display(OpenWFD)qcdisplaycfg_ADP_STAR_LA.xml 配置文件解析
  • 达梦数据库权限和预定角色介绍
  • Python编程从入门到实践_8-8 用户的专辑_答案
  • HummingBird 基于 Go 开源超轻量级 IoT 物联网平台
  • 10.小程序样式
  • Flink 流式读写文件、文件夹
  • 【SA8295P 源码分析】64 - QNX 与 Android GVM 显示 Dump 图片方法汇总
  • 字符串旋转(1)
  • 【SA8295P 源码分析】13 - Android GVM 虚拟机 QUPv3 UART / SPI / I2C功能配置及透传配置
  • STM32 F103C8T6学习笔记10:OLED显示屏GIF动图取模—简易时钟—动图手表的制作~