说说对React中类组件和函数组件的理解?有什么区别?

这篇具有很好参考价值的文章主要介绍了说说对React中类组件和函数组件的理解?有什么区别?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

回答思路:类组件–>函数组件–>区别

类组件

通过ES6类的编写形式去编写组件,该类必须继承React.Component,通过this.props的方式去访问父组件传递过来的参数,且在类组件中必须使用render方法,在return中返回React对象,如下:

class Example extends React.Component{
	constructor(props){
		super(props)
	}
	render(){
		return <h1>Hello,{this.props.name}</h1>
	}
}

函数组件

通过函数编写的形式去实现一个React组件,是React中定义组件最简单的方式,如下:

function Example(props){
	return <h1>hello,{props.name}</h1>;
}

区别

1.编写形式不同
2.状态管理不同
3.生命周期不同
4.调用方式不同
5.获取渲染的值的方式不同

编写形式不同:

函数组件:

function Example(props){
	return <h1>hello,{props.name}</h1>;
}

类组件:

class Example extends React.Component{
	constructor(props){
		super(props)
	}
	render(){
		return <h1>Hello,{this.props.name}</h1>
	}
}

状态管理不同:

在hooks出来之前,函数组件是无状态组件,不能保管组件的状态,类组件使用setState来保管
函数组件:

const Example = ()=>{
	const [count,setCount] = React.useState(0);
	return (
		<div>
			<p>count:{count}</p>
			<button onClick={()=>setCount(count+1)}>click me</button>
		</div>
	)
}

在使用hooks的情况下,一般如果函数组件调用state,需要创建一个state,提升到你的父组件,然后通过props传递给子组件

生命周期不同:

函数组件不存在生命周期,生命周期钩子都来自于继承React.Component,所以只有类组件有生命周期,但是函数组件使用useEffect也能够完成替代生命周期的作用,例如:

const Example = () =>{
	useEffect(()=>{
		console.log("Hello");
	},[]);
	return <h1>hello</h1>;
}

这里的useEffect就相当于类组件中的componentDidMount生命周期,如果在useEffect中return一个函数,这个函数会在组件卸载的时候执行,相当于componentWillUnmount
例如:

const Example = () =>{
	useEffect(()=>{
		return ()=>{
			console.log("bye");	
		};
	},[]);
	return <h1>hello</h1>;
}

调用方式的不同:

函数组件:

const Example = () =>{
	return <h1>hello</h1>;
}
// React内部
const result = Example(props) //<h1>hello</h1>

类组件:

class Example extends React.Component{
	render(){
		return <h1>hello</h1>
	}
	
}
// React内部
const instance = new Example(props) //Example{}
const result = instance.render() //<h1>hello</h1>

获取渲染的值的方式不同

函数组件中获取值不需用this,如直接使用props.name,但是在类组件中必须要加上this,如this.props.name,两者看起来实现功能是一致的,但是在组件中,输出this.props.name,props在react中是不可改变的,但是this总是可以改变的,可以在render和生命周期函数中读取新版本,因此我们在组件请求运行时更新,this.props将会改变,而在函数组件中,不存在this,props并不会发生改变,因此函数组件在请求运行时更新,props不发生改变,props.name还是旧的name

小结:

两种组件都有各自的优缺点,函数组件语法更短、更简单,这使得它更容易开发、理解和测试,类组件使用大量的this,不易理解文章来源地址https://www.toymoban.com/news/detail-814315.html

到了这里,关于说说对React中类组件和函数组件的理解?有什么区别?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • React创建组件的三种方式及其区别是什么?

    在React中,创建组件的三种主要方式是函数式组件、类组件和使用React Hooks的函数式组件。以下是对每种方式的详细解释以及它们之间的区别: 1、函数式组件: 函数式组件是使用纯粹的JavaScript函数来定义的。它接收一个props对象作为参数,并返回一个用于描述组件UI的React元

    2024年02月11日
    浏览(28)
  • React类组件中super()和super(props)有什么区别?

    在ES6中,通过extends实现类的继承,如下: 通过super实现调用父类,super代替父类的构建函数,相当于调用sup.prototype.constructor.call(this,name),如果子类不适用super会报错,报错的原因是子类没有自己的this对象,他只是继承父类的this对象,然后对其加工,也不能

    2024年01月24日
    浏览(37)
  • 说说我自己理解的dependencies和devDependencies的区别

             网上看了很多的资料,半懂半不懂的,后来略略想通了。我自己对这两个的理解有些粗暴,简单谈谈我个人的理解吧,不对之处,还请指出。         dependencies:生产环境 。这个生产环境不是对程序猿们来说,是对公司来说,产出利益的环境,我理解为 用户

    2024年02月03日
    浏览(25)
  • 说说你对数据结构的理解?有哪些?区别?

    数据结构是计算机存储、组织数据的方式,是指相互之间存在一种或多种特定关系的数据元素的集合 前面讲到,一个程序 = 算法 + 数据结构,数据结构是实现算法的基础,选择合适的数据结构可以带来更高的运行或者存储效率 数据元素相互之间的关系称为结构,根据数据元

    2024年04月10日
    浏览(26)
  • 面试题:说说 WebSocket与socket的区别

    WebSocket 与 Socket 都属于网络通信领域,但二者之间在实现机制和运行方式上存在很大差异。 Socket: Socket 是一种应用程序接口(API),它提供了许多操作系统下的编程接口,用于实现不同计算机之间的数据传输。Socket 层位于传输控制层(TCP或UDP协议),通过套接字实现双向通

    2024年04月12日
    浏览(27)
  • 说说你对分而治之、动态规划的理解?区别?

    分而治之是算法设计中的一种方法,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并 关于分而治之的实现,都会经历三个步骤: 分解:将原问题分解为若干个规模较小,相对独立,与原问

    2024年04月26日
    浏览(35)
  • 前端经典面试题 | 吊打面试官系列 之 说说你对TypeScript 和 JavaScript的理解

    🖥️ 前端经典面试题 专栏:吊打面试官系列 之 说说你对TypeScript 和 JavaScript的理解 🧑‍💼 个人简介:一个不甘平庸的平凡人🍬 ✨ 个人主页:CoderHing的个人主页 🍀 格言: ☀️ 路漫漫其修远兮,吾将上下而求索☀️ 👉 你的一键三连是我更新的最大动力❤️ 目录 一、回答

    2024年01月17日
    浏览(34)
  • 说说HTTP 和 HTTPS 有什么区别?

    http协议 超文本传输协议,是互联网上应用最多的协议, 基于TCP/IP 通讯协议来传递信息,用于从WWW服务器传输超文本到本地浏览器的传输协议。 https协议 我们可以将其看作是以安全为目标的http协议。在 http协议的基础 上增加了 SSL/TSL层 ,可以确保数据的传输的安全性和完整

    2024年02月10日
    浏览(38)
  • css基础知识二十:说说对Css预编语言的理解?有哪些区别?

    一、是什么 Css 作为一门标记性语言,语法相对简单,对使用者的要求较低,但同时也带来一些问题 需要书写大量看似没有逻辑的代码,不方便维护及扩展,不利于复用,尤其对于非前端开发工程师来讲,往往会因为缺少 Css 编写经验而很难写出组织良好且易于维护的 Css 代码

    2024年02月16日
    浏览(25)
  • 面试官:在原生input上面使用v-model和组件上面使用有什么区别?

    还是上一篇面试官:来说说vue3是怎么处理内置的v-for、v-model等指令? 文章的那个粉丝,面试官接着问了他另外一个v-model的问题。 面试官:vue3的v-model都用过吧,来讲讲。 粉丝:v-model其实就是一个语法糖,在编译时v-model会被编译成 :modelValue 属性和 @update:modelValue 事件。一般

    2024年04月23日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包