React中的函数组件与类组件

news/2024/10/21 11:38:43/

在React中,有两种不同的组件形式:函数组件和类组件。它们的写法并不相同。

函数组件

React的函数组件是一个只接受 props 参数并返回元素的 JavaScript 函数(该props与Vue中props一样是只读的,且都是父组件传递给子组件的数据)。

export function MyComponent(props) { // 不同于Vue中的函数组件(有props和ctx两个参数)return <h1>{ props.hobby }</h1>;
}

函数式组件自身没有任何状态(state)生命周期方法,只接受其父组件传递的数据(props)。

类组件

类组件使用class关键字定义,组件名格式必须是大驼峰,且继承于React.component

class MyComponent extends React.Component {constructor(props) {super(props); // 也可以接受propsthis.state = {} // 组件的状态(响应式状态)// 必须为类组件中的方法显示绑定this(法一),否则在经过babel的转化后(严格模式下)函数方法的this指向undefinedthis.[methodName1] = this.[methodName1].bind(this);}[methodName1]() {} // 类组件的方法// 箭头函数没有自己的this,因此会使用上层作用域的this[methodName2] = () => {}[methodName3]() {} // render函数中的this默认指向组件实例render() { // 类组件固定方法,返回要渲染的内容(jsx)return (<> // 等同于<Fragment></Fragment>,不过Fragment上可以写key<h1>Hello, { this.props.name }</h1><button onClick={this.[methodName1]}>点击按钮</button>{/* 或者在jsx中为类组件中的方法显示绑定this(法一) */}{/* <button onClick={this.[methodName1].bind(this)}>点击按钮</button> */}<button onClick={this.[methodName2]}>点击按钮</button><button onClick={() => this.[methodName3]()}>点击按钮</button></>);}
}

因此,函数组件和类组件的主要区别是:函数组件没有任何状态(state)和生命周期方法(因为生命周期方法来源于React.component),且函数组件中不会使用this。不过,函数组件可以在使用React中的Hooks时使用state


http://www.ppmy.cn/news/1540782.html

相关文章

Redis哨兵模式部署(超详细)

哨兵模式特点 主从模式的弊端就是不具备高可用性&#xff0c;当master挂掉以后&#xff0c;Redis将不能再对外提供写入操作&#xff0c;因此sentinel模式应运而生。sentinel中文含义为哨兵&#xff0c;顾名思义&#xff0c;它的作用就是监控redis集群的运行状况&#xff0c;此…

多模态大语言模型(MLLM)-Blip3/xGen-MM

论文链接&#xff1a;https://www.arxiv.org/abs/2408.08872 代码链接&#xff1a;https://github.com/salesforce/LAVIS/tree/xgen-mm 本次解读xGen-MM (BLIP-3): A Family of Open Large Multimodal Models 可以看作是 [1] Blip: Bootstrapping language-image pre-training…

ESP32-C3实现非易失变量(Arduino IDE )

1效果 网页输入数据&#xff0c;串口打印数据。掉电后数据还在 2源码 #include <WiFi.h> // 包含WiFi库&#xff0c;用于处理WiFi连接 #include <WebServer.h> // 包含WebServer库&#xff0c;用于创建Web服务器 #include <Preferences.h> // 包含Prefere…

【java数据结构】栈

【java数据结构】栈 一、栈的概念二、 栈的使用三、 栈的模拟实现(数组)构造方法size()empty()push()pop()peek() 四、 栈的模拟实现(链表)构造方法size()empty()push()pop()peek() 五、 栈的例题 此篇博客希望对你有所帮助&#xff08;帮助你了解栈&#xff09;&#xff0c;不…

Python爬虫介绍

在互联网上&#xff0c;信息就像散落的珍珠&#xff0c;而Python爬虫就是帮你把它们串起来的线。无论你是想要分析市场趋势、研究社交媒体行为&#xff0c;还是简单地收集数据做报告&#xff0c;Python爬虫都能帮你高效完成任务。 是一种使用Python编程语言编写的自动化脚本&a…

MarkDown---标题

软件下载网址&#xff1a;Typora 官方中文站 程序员必备软件MarkDown&#xff0c;这个软件能提升自己的文件整理效率&#xff0c;日常用于对接接口等等操作都离不开MarkDown。 下载软件后&#xff0c;如果需要激活清查看我这篇文章&#xff1a; Typora序列号激活_typora激活…

视频转文字工具搜集

视频转文字工具是一种能够将视频中的音频内容转化为文字的软件或在线服务。这类工具通常支持多种视频格式和语言&#xff0c;适用于不同的场景和需求。以下是一些推荐的视频转文字工具及其特点&#xff1a; 媒关系&#xff1a;这是一款免费的视频转文字工具&#xff0c;支持多种…

keepalived(高可用)+nginx(负载均衡)+web

环境 注意&#xff1a; (1) 做高可用负载均衡至少需要四台服务器&#xff1a;两台独立的高可用负载均衡器&#xff0c;两台web服务器做集群 (2) vip&#xff08;虚拟ip&#xff09;不能和物理ip冲突 (3) vip&#xff08;虚拟ip&#xff09;最好设置成和内网ip同一网段&#xf…