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

函数组件、Hooks和类组件区别

 1. 函数组件(Function Components)

函数组件是接收props并返回React元素的纯JavaScript函数。它们不能拥有自己的状态(state)或生命周期方法,但在React 16.8中引入Hooks之后,这种情况发生了变化。

特点

  • 声明式地编写。
  • 不需要类,减少了样板代码。
  • 没有this关键字的问题。
  • 在组件渲染时调用,每次组件更新时都会重新调用。

例子

 使用Hooks和函数组件 

import React from 'react'
import { withTranslation } from 'react-i18next'
import { Modal } from 'antd'import SvgIcon from '@/components/SvgIcon'//考试进行中弹框组件
function ExamOnGoingModal(props) {const { t, visible, onOk, onCancel } = propsreturn (<Modaltitle={<><SvgIcon iconClass="icon-jingshidanchuang" color='#007AFF' size="20px" /><span style={{ paddingLeft: '16px' }}>{t('examination.examOnGoing')}</span></>}visible={visible}onOk={onOk}onCancel={onCancel}okText={t('setting.refresh')}cancelText={t('common.close')}><p>{t('examination.examOnGoingTip')}</p></Modal>)
}export default withTranslation()(ExamOnGoingModal)
//使用 withTranslation() 高阶组件包装 ExamOnGoingModal,以便将 t 函数注入到其 props 中

2. Hooks(Hooks API)

Hooks是React 16.8中引入的一个新特性,允许你在不编写类的情况下使用状态(state)和其他React特性。Hooks只能在函数组件内部使用。

特点

  • 让你在不编写类的情况下使用状态和其他React特性。
  • 完全可选的。你仍然可以在项目中混合使用类和函数组件。
  • 允许你复用状态逻辑,而无需更改组件结构。

常用Hooks

  • useState:在函数组件中添加状态。
  • useEffect:在函数组件中执行副作用操作(如数据获取、订阅或手动更改React组件中的DOM)。
  • useContext:让你在函数组件中订阅React的Context。

例子

...
import { useTranslation } from 'react-i18next';  function ExamOnGoingModal({ visible, onOk, onCancel }) {  // 使用useTranslation Hook获取t函数  const { t } = useTranslation();  return (  <Modal  //同函数组件</Modal>  );  
}  export default ExamOnGoingModal;  
//这里不再需要withTranslation()来包装组件,因为我们已经直接在组件内部使用了useTranslation Hook


3. 类组件(Class Components)

类组件是通过继承React.Component来创建的React组件。它们有自己的状态(state)和生命周期方法,并且通常比函数组件更复杂。

特点

  • 可以包含自己的状态(state)和生命周期方法。
  • 适用于更复杂的场景,如需要使用Refs、获取DOM元素、手动调用组件的方法等。
  • 需要this关键字来访问组件的属性和方法。

例子

class ExamOnGoingModal extends React.Component {handleOk = () => {this.props.onOk()}handleCancel = () => {this.props.onCancel()}render() {const { t, visible } = this.propsreturn (<Modal...visible={visible}onOk={this.handleOk}onCancel={this.handleCancel}okText={t('setting.refresh')}cancelText={t('common.close')}><p>{t('examination.examOnGoingTip')}</p></Modal>)}
}
export default withTranslation()(ExamOnGoingModal)


总结

  • 函数组件简单且易于理解,但在引入Hooks之前无法保持状态。
  • Hooks在函数组件中引入状态和其他React特性,同时保持代码的简洁性和复用性。
  • 类组件功能强大,但编写和维护可能更加复杂,尤其是在处理this和生命周期方法时。

相关文章:

函数组件、Hooks和类组件区别

1. 函数组件&#xff08;Function Components&#xff09; 函数组件是接收props并返回React元素的纯JavaScript函数。它们不能拥有自己的状态&#xff08;state&#xff09;或生命周期方法&#xff0c;但在React 16.8中引入Hooks之后&#xff0c;这种情况发生了变化。 特点&a…...

在线点餐新体验:Spring Boot 点餐系统

摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于网上点餐系统当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了网上点餐系统&#xff0c;它彻底改变了过去传统的…...

WPF中Viewbox的介绍和用法

在 WPF&#xff08;Windows Presentation Foundation&#xff09; 中&#xff0c;Viewbox 是一个非常有用的容器控件&#xff0c;主要用于根据其自身大小自动调整子元素的缩放比例&#xff0c;以保持其内容的显示效果。无论窗口如何调整大小&#xff0c;Viewbox 内的内容都会按…...

QMT如何获取股票基本信息?如上市时间、退市时间、代码、名称、是否是ST等。QMT量化软件支持!

获取股票概况 包含股票的上市时间、退市时间、代码、名称、是否是ST等。 #获取合约基础信息数据 该信息每交易日9点更新 #内置Python 提示 旧版本客户端中&#xff0c;函数名为ContextInfo.get_instrumentdetail 调用方法 内置python ContextInfo.get_instrument_detai…...

2024年中国科技核心期刊目录(科普卷)

2024年中国科技核心期刊目录 &#xff08;科普卷&#xff09; 序号 期刊名称 1 爱上机器人 2 百科知识 3 保健医…...

[解决]navicat连接mysql成功,但是使用jdbc连接不上

在连接数据库时&#xff0c;最初使用的 JDBC URL 配置如下&#xff1a; jdbc:mysql://192.168.56.100:3306/mzxLiving_manage?useUnicodetrue&characterEncodingUTF-8&serverTimezoneAsia/Shanghai修改之后的JDBC URL为 jdbc:mysql://192.168.56.100:3306/mzxLiving…...

sar信号RD域的距离向傅里叶变换

下面可知&#xff0c;举例傅里叶变换时&#xff0c;posp 距离时间和频率 t不等于ft/K。而方位时间和频率时这种线性关系...

4 html5 web components原生组件详细教程

web components 前面我们已经介绍过&#xff0c;这一期我们就来讲一讲具体用法和这其中的关键只是点&#xff1a; 1 基本使用 如果我们想实现一个封装的原生组件&#xff0c;那就离不开使用js去封装&#xff0c;这里主要就是基于HTMLElement这个类&#xff0c;去创建创建一个…...

nginx+keepalived健康检查案例详解(解决nginx出现故障却不能快速切换到备份服务器的问题)

文章目录 简介配置过程前置环境请看创建健康检查脚本结果测试 简介 在我们通过nginxkeepalived实现高可用后&#xff0c;会发现nginx出现故障的时候keepalived并不会将虚拟ip切换到备份服务器上其原理就是nginx和keepalived是两个独立的服务&#xff0c;Nginx的故障状态不会触…...

什么是AI大模型?

什么是AI大模型? 人工智能&#xff08;AI&#xff09;大模型近年来在各个领域掀起了一场技术革命&#xff0c;从语言生成到图像识别&#xff0c;再到自动驾驶和医疗诊断&#xff0c;AI大模型的应用场景越来越广泛。这些模型的表现令人惊叹&#xff0c;但它们的工作原理和背后技…...

建造者模式__c#

目录 调用 指挥者 抽象建造者 建造者 定义具体产品 调用 用指挥者指挥建造者建造产品 在指挥者这里组装成产品 namespace _建造者模式 {internal class Program{static void Main(string[] args){Builder buildernew JiangHuaiBuilder();//建造者Director director new…...

学习MRI处理过程中搜到的宝藏网站

今天浏览网页查到了一些宝藏网站&#xff0c;正好记录一下&#xff0c;后面搜到好东东再接着填充&#xff0c;方便查阅~ &#xff08;1&#xff09;牛人网站 这个网站是在搜集seed关键词时发现的&#xff0c;用pdf文档记录&#xff0c;可下载查阅&#xff0c;条理清晰&#xf…...

【C语言】const char*强制类型转换 (type cast)的告警问题

void run_upload(const char *ftp_url) {CircularQueue queue;// 初始化环形队列for (int i = 0; i < QUEUE_SIZE; i++) {queue.items[i].data = malloc(BUFFER_SIZE);if (queue.items[i].data == NULL) {fprintf(stderr, "Failed to allocate memory for queue item %…...

python-比较月亮大小/数组下标/人见人爱a+b

一:比较月亮大小 题目描述 小理是一名出色的狼人。众所周知&#xff0c;狼人只有在满月之夜才会变成狼。 同时&#xff0c;月亮的大小随着时间变化&#xff0c;它的大小变化 3030 天为一循环。 它的变化情况(从第一天开始)为 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,14,13,12,1…...

什么是组态、组态的应用场景介绍

随着计算机技术和工业自动化水平迅速提高&#xff0c;而车间现场种类繁杂的控制设备和过程监控装置使得传统的工业控制软件无法满足用户的各种需求。在“组态”概念出现之前&#xff0c;工程技术人员需要通过编写程序来实现某一任务&#xff0c;不但工作量大、周期长&#xff0…...

Java项目: 基于SpringBoot+mybatis+maven实现的智能推荐卫生健康系统分前后台(含源码+数据库+开题报告+任务书+毕业论文)

一、项目简介 本项目是一套基于SpringBootmybatismaven实现的智能推荐卫生健康系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美…...

本地生活商城开发搭建 同城O2O线上线下推广

同城本地化商城目前如火如荼&#xff0c;不少朋友咨询本地生活同城平台怎么开发&#xff0c;今天商淘云与大家分享同城O2O线上商城的设计和开发。 本地生活商城一般会涉及到区域以及频道类&#xff0c;一般下单需要支持用户定位、商家定位&#xff0c;这样利于用户可以快速找到…...

41. 如何在MyBatis-Plus中实现批量操作?批量插入和更新的最佳实践是什么?

在 MyBatis-Plus 中&#xff0c;实现批量操作&#xff08;如批量插入、批量更新&#xff09;是非常常见的需求。MyBatis-Plus 提供了对批量操作的良好支持&#xff0c;可以通过多种方式实现高效的批量处理。下面详细介绍批量操作的实现方式以及最佳实践。 1. 批量插入 批量插入…...

LlamaIndex 的Node节点后处理器模块介绍

Node 后处理器模块 LlamaIndex 是一个旨在连接大型语言模型&#xff08;LLMs&#xff09;与外部数据的框架&#xff0c;允许开发者构建能够处理和回应复杂查询的应用程序。在这个框架内&#xff0c;NodePostProcessor 扮演着优化数据处理流程的重要角色。为了更好地理解 NodeP…...

Dubbo 如何使用 Zookeeper 作为注册中心:原理、优势与实现详解

Dubbo 是一个高性能的 Java 分布式服务框架&#xff0c;而 Zookeeper 常被用作 Dubbo 的服务注册中心。Zookeeper 提供了分布式一致性和协调服务&#xff0c;Dubbo 通过 Zookeeper 实现服务注册与发现功能&#xff0c;确保在分布式环境下服务实例的动态管理和可靠发现。 下面是…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中&#xff0c;高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司&#xff0c;近期做出了一个重大技术决策&#xff1a;弃用长期使用的 Nginx&#xff0c;转而采用其内部开发…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

微信小程序云开发平台MySQL的连接方式

注&#xff1a;微信小程序云开发平台指的是腾讯云开发 先给结论&#xff1a;微信小程序云开发平台的MySQL&#xff0c;无法通过获取数据库连接信息的方式进行连接&#xff0c;连接只能通过云开发的SDK连接&#xff0c;具体要参考官方文档&#xff1a; 为什么&#xff1f; 因为…...

python执行测试用例,allure报乱码且未成功生成报告

allure执行测试用例时显示乱码&#xff1a;‘allure’ &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;ڲ&#xfffd;&#xfffd;&#xfffd;&#xfffd;ⲿ&#xfffd;&#xfffd;&#xfffd;Ҳ&#xfffd;&#xfffd;&#xfffd;ǿ&#xfffd;&am…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

Caliper 配置文件解析:fisco-bcos.json

config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...