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

React----函数组件和类组件

函数组件与类组件:React 中的两种组件风格

React 是一个用于构建用户界面的流行 JavaScript 库,其中组件是构建块的基本单元。在 React 中,有两种主要的组件风格:函数组件和类组件。本文将使用TypeScript介绍它们的用法、区别以及如何选择使用哪一种。

函数组件

函数组件是一种简单的 React 组件定义方式,它是一个 TypeScript 函数,接收一个包含组件属性(props)的类型定义作为参数,并返回一个 React 元素。以下是一个 TypeScript 函数组件的例子:

import React from 'react';interface FunctionalComponentProps {message: string;
}const FunctionalComponent: React.FC<FunctionalComponentProps> = (props) => {return <div>{props.message}</div>;
};

在这个例子中,我们使用 React.FC 泛型类型定义了组件的属性类型。

使用 Hooks 的函数组件

import React, { useState } from 'react';interface FunctionalComponentWithStateProps {}const FunctionalComponentWithState: React.FC<FunctionalComponentWithStateProps> = () => {const [count, setCount] = useState<number>(0);return (<div><p>Count: {count}</p><button onClick={() => setCount(count + 1)}>Increment</button></div>);
};

在使用 Hooks 的函数组件中,我们同样使用了 TypeScript 泛型来定义状态的类型。

类组件

类组件是通过 ES6 类来定义的,继承自 React.Component。它有自己的状态(通过 this.state 访问)和生命周期方法。以下是一个 TypeScript 类组件的例子:

import React, { Component } from 'react';interface ClassComponentProps {}interface ClassComponentState {message: string;
}class ClassComponent extends Component<ClassComponentProps, ClassComponentState> {constructor(props: ClassComponentProps) {super(props);this.state = {message: 'Hello, Class Component!',};}render() {return <div>{this.state.message}</div>;}
}

在这个例子中,我们使用了两个泛型参数,分别定义了组件的属性和状态的类型。

区别与选择

1. 类型定义

函数组件使用 React.FC 泛型定义属性类型,而类组件则使用泛型参数。在函数组件中,属性类型是直接传递给函数的泛型参数,而在类组件中,属性类型是作为类的泛型参数传递的。

2. 状态管理

在函数组件中,通过 useState 返回的数组的第一个元素即为状态,需要手动定义状态的类型。而在类组件中,通过 this.state 访问状态,并且可以通过泛型参数定义状态的类型。

3. 生命周期

函数组件使用 useEffect 处理副作用,而类组件则有自己的生命周期方法。在 TypeScript 中,函数组件的生命周期方法也需要使用 useEffect 来定义。

4. 性能

由于函数组件更简洁,通常会比类组件具有更好的性能。在 TypeScript 中,这一点并无太大变化。

5. 未来发展

React 团队更加推崇使用函数组件和 Hooks。在 TypeScript 中,函数组件更加自然地与类型一起工作,因为它们的类型定义更为简洁。

结论

在 TypeScript 中,函数组件和类组件都是有效的选择,具体取决于项目需求和个人偏好。函数组件在类型定义上更加直观和简洁,适用于大多数场景。类组件仍然适用于复杂的状态管理和生命周期需求。在实际开发中,可以根据具体情况选择合适的组件类型,也可以灵活地结合使用。

相关文章:

React----函数组件和类组件

函数组件与类组件&#xff1a;React 中的两种组件风格 React 是一个用于构建用户界面的流行 JavaScript 库&#xff0c;其中组件是构建块的基本单元。在 React 中&#xff0c;有两种主要的组件风格&#xff1a;函数组件和类组件。本文将使用TypeScript介绍它们的用法、区别以及…...

Kafka集群部署 (KRaft模式集群)

KRaft 模式是 Kafka 在 3.0 版本中引入的新模式。KRaft 模式使用了 Raft 共识算法来管理 Kafka 集群元数据。Raft 算法是一种分布式共识算法&#xff0c;具有高可用性、可扩展性和安全性等优势。 在 KRaft 模式下&#xff0c;Kafka 集群中的每个 Broker 都具有和 Zookeeper 类…...

Vue 自定义仿word表单录入之日期输入组件

因项目需要&#xff0c;要实现仿word方式录入数据&#xff0c;要实现鼠标经过时才显示编辑组件&#xff0c;预览及离开后则显示具体的文字。 鼠标经过时显示 正常显示及离开时显示 组件代码 <template ><div class"paper-input flex flex-col border-box "…...

Oracle与Java JDBC数据类型对照

Oracle Database JDBC开发人员指南和参考 SQL Data TypesJDBC Type CodesStandard Java TypesOracle Extension Java Types CHAR java.sql.Types.CHAR java.lang.String oracle.sql.CHAR VARCHAR2 java.sql.Types.VARCHAR java.lang.String oracle.sql.CHAR LONG jav…...

C++力扣题目226--翻转二叉树

给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1]示例 2&#xff1a; 输入&#xff1a;root [2,1,3] 输出&#xff1a;[2,3,1]示例 3&#x…...

Gorm 数据库表迁移与表模型定义

文章目录 一、Docker快速创建MySQL实例1.1 创建1.3 创建数据库 二、AutoMigrate介绍与使用2.1 AutoMigrate介绍2.2 AutoMigrate 基本使用 三、模型定义3.1 模型定义3.2 快速增删改查3.3 约定3.4 gorm.Model 四、表模型主键、表名、列名的约定4.1 主键&#xff08;Primary Key&a…...

系列三、Spring Security中自定义用户名/密码

一、Spring Security中自定义用户名/密码 1.1、自定义用户名/密码 1.1.1、配置文件中配置 spring.security.user.nameroot spring.security.user.password123456 1.1.2、定义基于内存的用户 /*** Author : 一叶浮萍归大海* Date: 2024/1/11 21:50* Description:*/ Configu…...

如何顺滑使用华为云编译构建平台?

这两年平台构建服务需求越来越大&#xff0c;却一直苦于找不到一些指南&#xff0c; 这里特意写了一篇&#xff0c; 对在学习代码阶段和新手程序员朋友也蛮友好&#xff0c; 配置真的也不难&#xff0c; 也特别适合想尝试从0到1做个APP的朋友了。 以华为云的CodeArts Build为例…...

查看Linux磁盘空间

(1)、该命令会列出当前系统所有挂载的文件系统以及它们的使用情况&#xff0c;包括总容量、已用空间、可用空间、使用百分比等信息 df -h如果查看某一个文件夹的,可以 df -h folderName (2)、计算指定目录下所有文件和子目录所占用的磁盘空间大小&#xff0c;并以人类可读的格…...

2023年全国职业院校技能大赛(高职组)“云计算应用”赛项赛卷⑩

2023年全国职业院校技能大赛&#xff08;高职组&#xff09; “云计算应用”赛项赛卷10 目录 需要竞赛软件包环境以及备赛资源可私信博主&#xff01;&#xff01;&#xff01; 2023年全国职业院校技能大赛&#xff08;高职组&#xff09; “云计算应用”赛项赛卷10 模块…...

vim基本操作命令

一、vi简介 vi是“Visual interface”的简称&#xff0c;它在Linux上的地位就仿佛Edit程序在DOS上一样。它可以执行输出、删除、查找、替换、块操作等众多文本操作&#xff0c;而且用户可以根据自己的需要对其进行定制。Vi不是一个排版程序&#xff0c;它不象Word或WPS那样可以…...

mybatis-plus实现真正的批量插入

1、安装依赖 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-extension</artifactId><version>3.5.3.2</version></dependency>版本与mybatis-plus一致 2、编写sql注入器 package com.example.answe…...

pytorch12:GPU加速模型训练

目录 1、CPU与GPU2、数据迁移至GPU2.1 to函数使用方法 3、torch.cuda常用方法4、多GPU并行运算4.1 torch.nn.DataParallel4.2 torch.distributed加速并行训练 5、gpu总结 1、CPU与GPU CPU&#xff08;Central Processing Unit, 中央处理器&#xff09;&#xff1a;主要包括控制…...

P1603 斯诺登的密码题解

题目 &#xff08;1&#xff09;找出句子中所有用英文表示的数字(≤20)&#xff0c;列举在下&#xff1a; 正规&#xff1a;one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty 非正规…...

YOLOv8 + openVINO 多线程数据读写顺序处理

多线程数据读写顺序处理 一个典型的生产者-消费者模型&#xff0c;在这个模型中&#xff0c;多个工作线程并行处理从共享队列中获取的数据&#xff0c;并将处理结果以保持原始顺序的方式放入另一个队列。 多线程处理模型&#xff0c;具体细节如下&#xff1a; 1.数据:数据里必…...

端到端自动驾驶

自动驾驶主要流程&#xff1a;感知->预测->规划 预测是预测周围目标&#xff08;车、行人、动物等&#xff09;的轨迹&#xff0c;规划是规划自车的运动轨迹。 UniAD[CVPR 2023]: 使用transformer架构&#xff0c;统一自动驾驶流程&#xff0c;完成所有检测&#xff0c…...

Developer Tools for Game Creator 1

插件包含: 持久世界时间管理系统 单击以生成对象或预设 游戏内调试控制台 游戏内事件控制台 控制台管理控制 命令模板脚本 游戏内屏幕截图 低分辨率和高分辨率图像 缩略图生成 移动支持 使用Game Creator Action或拖放来激活和控制组件,无需编码。 通过此资产,您可以获得: …...

软件测试|好用的pycharm插件推荐(三)——Rainbow Brackets

简介 我们平时写代码的时候&#xff0c;括号是让我们非常头疼的地方&#xff0c;特别是代码逻辑很多&#xff0c;层层嵌套的情况。 一眼很难看出&#xff0c;代码是从哪个括号开始&#xff0c;到哪个反括号结束的。这个时候要是有一款工具能够让我们一眼就看出代码从哪个括号开…...

MyBatisPlus学习二:常用注解、条件构造器、自定义sql

常用注解 基本约定 MybatisPlus通过扫描实体类&#xff0c;并基于反射获取实体类信息作为数据库表信息。可以理解为在继承BaseMapper 要指定对应的泛型 public interface UserMapper extends BaseMapper<User> 实体类中&#xff0c;类名驼峰转下划线作为表名、名为id的…...

深入理解C#中的引用类型、引用赋值以及 `ref` 关键字

深入理解C#中的引用类型、引用赋值以及 ref 关键字 在C#编程中&#xff0c;理解引用类型、引用赋值以及 ref 关键字的使用对于编写高效、可靠的代码至关重要。本文将深入探讨这些概念&#xff0c;帮助您更好地理解C#的工作原理。 引用类型简介 在C#中&#xff0c;所有的类型都…...

像素剧本圣殿详细步骤:Qwen2.5-14B-Instruct模型服务健康检查与自动扩缩容配置

像素剧本圣殿详细步骤&#xff1a;Qwen2.5-14B-Instruct模型服务健康检查与自动扩缩容配置 1. 项目概述 像素剧本圣殿&#xff08;Pixel Script Temple&#xff09;是基于Qwen2.5-14B-Instruct大模型深度微调的专业剧本创作工具。该系统采用复古未来像素风格UI设计&#xff0…...

DeepSeek-Coder-V2-Lite-Instruct社区案例集:开发者如何用AI改变编程方式

DeepSeek-Coder-V2-Lite-Instruct社区案例集&#xff1a;开发者如何用AI改变编程方式 【免费下载链接】DeepSeek-Coder-V2-Lite-Instruct 开源代码智能利器——DeepSeek-Coder-V2&#xff0c;性能比肩GPT4-Turbo&#xff0c;全面支持338种编程语言&#xff0c;128K超长上下文&a…...

实战指南:利用快马ai为django项目生成开箱即用的vscode python开发环境

作为一个长期使用Python开发Django项目的程序员&#xff0c;我深知配置开发环境是个既基础又容易踩坑的环节。最近尝试用InsCode(快马)平台生成配置方案&#xff0c;发现能省去大量重复劳动。下面分享我的实战经验&#xff1a; 项目结构规范化 平台生成的Django项目骨架严格遵循…...

无片外电容的LDO电路设计手册:完整IP现成电路,包含过温与过流保护、带隙与BUFFER,性能...

无片外电容LDO电路设计 完整IP现成电路&#xff0c;具有过温保护和过流保护&#xff0c;带隙&#xff0c;BUFFER都有 性能指标已流片验证 同时有相关文献、各模块电路功能分析简化计算笔记&#xff0c;适合学习入门不适合纵向可以附赠一些自己学习时觉得比较有帮助的资料。 有好…...

寒冬降临:当资本撤出AI测试赛道

2026年初&#xff0c;全球资本市场对AI技术的狂热投资骤然降温。随着VC基金转向更保守的资产配置&#xff0c;依赖融资的AI测试工具开发商面临生存危机&#xff1a;初创公司批量裁员&#xff0c;开源项目停止维护&#xff0c;企业采购的智能测试平台因无法续约沦为“断线木偶”…...

新手避坑指南:用STC89C51和DHT11搭建温湿度报警器(附Keil5代码调试心得)

从零搭建温湿度报警器&#xff1a;STC89C51与DHT11实战避坑手册 第一次接触51单片机项目时&#xff0c;那种既兴奋又忐忑的心情至今记忆犹新。看着网上的开源项目资料&#xff0c;满心以为按部就班就能成功&#xff0c;结果从元器件选型到代码烧录&#xff0c;几乎每一步都踩了…...

MotorController:嵌入式伺服电机驱动的确定性执行封装

1. 项目概述MotorController是一个面向伺服系统电机控制的轻量级工具类&#xff0c;其设计目标并非替代完整的运动控制固件栈&#xff0c;而是为嵌入式工程师提供一套可直接集成、低侵入、高可控性的底层电机驱动封装。该类不依赖特定硬件抽象层&#xff08;HAL&#xff09;或实…...

光流法在气象雷达中的应用:从原理到外推实践

光流法在气象雷达中的应用&#xff1a;从原理到外推实践 气象雷达作为现代气象监测的核心工具&#xff0c;其回波数据蕴含着丰富的天气系统动态信息。如何从这些看似静态的图像序列中提取运动规律&#xff0c;进而预测未来短时内的天气变化&#xff0c;一直是气象学界和工程界关…...

别再死记硬背Modbus了!用Python+Modbus-TCP/RTU模拟器5分钟搞懂数据帧

用PythonModbus模拟器5分钟实战协议帧解析 当你第一次接触工业通信协议时&#xff0c;那些晦涩的术语和抽象的数据帧结构是否让你望而生畏&#xff1f;作为在工业自动化领域工作多年的开发者&#xff0c;我完全理解这种挫败感。传统学习Modbus的方式往往从理论入手&#xff0c;…...

探索GetQzonehistory:永久保存QQ空间记忆的数字时光机

探索GetQzonehistory&#xff1a;永久保存QQ空间记忆的数字时光机 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 在数字时代&#xff0c;我们的记忆分散在各个社交平台&#xff0c;而Q…...