React 函数式组件和类式组件详情
前言
React 是 组件化的 的 JS 库,组件化 也是 React 的核心思想。使用 React 可以构建管理自身状态的封装组件,然后对其组合以构成复杂的 UI。那么什么是组件呢? 组件是用来实现局部功能效果的代码和资源的集合,包括 html / css / js/ image 等,组件的作用是 简化代码、复用代码、提高运行效率。
React 里主要有两种类型的组件:
- 函数式组件 => 基于函数;
- 类式组件 => 基于类;
1. 函数式组件
函数式组件是基于使用 function
定义的函数,函数式组件 和 普通函数 最主要的区别在 调用的时候,函数式组件在渲染的时候没有 被人为显式调用,而是由 React 内部去调用。来看个例子:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>React函数式组件</title> </head> <body> <div id="demo"></div> <!-- 引入react核心库 --> <script type="text/javascript" src="./react.development.js"></script> <!-- 引入react-dom,用于支持react操作DOM --> <script type="text/javascript" src="./react-dom.development.js"></script> <!-- 引入babel,用于将jsx转为js --> <script type="text/javascript" src="./babel.min.js"></script> <script type="text/babel"> //1. 创建函数式组件 function MyComponent(){ return <h2>我是函数式组件</h2> } //2. 渲染组件到页面 ReactDOM.render(<MyComponent/>,document.getElementById('demo')) </script> </body> </html>
我们先创建一个盒子,用 id
进行唯一标识:
<div id="demo"></div>
引入 react 依赖库,接着在 script
中先 创建一个函数式组件:
//1. 创建函数式组件 function MyComponent(){ return <h2>我是函数式组件</h2> }
然后 渲染组件到页面:
//2. 渲染组件到页面 ReactDOM.render(<MyComponent/>,document.getElementById('demo'))
来分析一下,在执行了 ReactDOM.render(<MyComponent/>,...)
之后,react 做了哪些事情呢:
- (1) react 先解析组件标签
id ==> demo
,通过标签 找到了MyComponent
组件; - (2) react 发现组件是函数定义的,接着 调用 这个函数;
- (3) react 将函数返回的 虚拟 DOM 转换为 真实DOM;
- (4) 最后呈现在页面中;
2. 类式组件
类式组件是基于使用 class
定义的类,需要继承自 React.Component
;另外,类式组件中必须实现 render函数
。
来看个例子:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>React类式组件</title> </head> <body> <div id="demo"></div> <!-- 引入react核心库 --> <script type="text/javascript" src="./react.development.js"></script> <!-- 引入react-dom,用于支持react操作DOM --> <script type="text/javascript" src="./react-dom.development.js"></script> <!-- 引入babel,用于将jsx转为js --> <script type="text/javascript" src="./babel.min.js"></script> <script type="text/babel"> //1. 创建类式组件 class MyComponent extends React.Component { render(){ return <h2>我是类式组件</h2> } } //2. 渲染组件到页面 ReactDOM.render(<MyComponent/>,document.getElementById('demo')) </script> </body> </html>
同样,我们先创建一个盒子,用 id
进行唯一标识:
<div id="demo"></div>
引入 react 依赖库,接着在 script
中 创建一个类式组件:
//1. 创建类式组件 class MyComponent extends React.Component { render(){ return <h2>我是类式组件</h2> } }
然后 渲染组件到页面:
//2. 渲染组件到页面 ReactDOM.render(<MyComponent/>,document.getElementById('demo'))
不难发现,类式组件 和 函数式组件 不同的地方就是在创建组件的地方,而在渲染的时候则是一样。同样来来分析一下,在执行了 ReactDOM.render(<MyComponent/>,...)
之后,react 做了哪些事情呢:
- (1) react 先解析组件标签
id ==> function
,通过标签 找到了MyComponent
组件; - (2) react 发现组件是用类定义的,接着 new 一个该类的实例;
- (3) react 通过该实例 调用 到类原型上的
render
方法; - (3) react 将
render
返回的 虚拟 DOM 转换为 真实DOM; - (4) 最后呈现在页面中;
到此这篇关于React 函数式组件和类式组件详情的文章就介绍到这了,更多相关React 组件内容请搜索猪先飞以前的文章或继续浏览下面的相关文章希望大家以后多多支持猪先飞!
原文出处:https://juejin.cn/post/7126846258366382087
相关文章
- 这篇文章主要介绍了Vue组件跨层级获取组件操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-28
关于React Native报Cannot initialize a parameter of type'NSArray<id<RCTBridgeModule>>错误(解决方案)
这篇文章主要介绍了关于React Native报Cannot initialize a parameter of type'NSArray<id<RCTBridgeModule>>错误,本文给大家分享解决方案,需要的朋友可以参考下...2021-05-12- 这篇文章主要介绍了js组件SlotMachine实现图片切换效果制作抽奖系统的相关资料,需要的朋友可以参考下...2016-04-19
- 今天我们来给大家介绍下在Vue开发中我们经常会碰到的一种需求场景,本文主要介绍了Vue动态查询规则生成组件,需要的朋友们下面随着小编来一起学习学习吧...2021-05-27
React引入antd-mobile+postcss搭建移动端
本文给大家分享React引入antd-mobile+postcss搭建移动端的详细流程,文末给大家分享我的一些经验记录使用antd-mobile时发现我之前配置的postcss失效了,防止大家踩坑,特此把解决方案分享到脚本之家平台,需要的朋友参考下吧...2021-06-21- 这篇文章主要介绍了React使用高德地图的实现示例(react-amap),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-04-18
- 这篇文章主要介绍了vue中如何使用element的日历组件,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-09-30
使用 React 和 Threejs 创建一个VR全景项目的过程详解
这篇文章主要介绍了使用 React 和 Threejs 创建一个VR全景项目的过程详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-04-06- 这篇文章主要介绍了Vue多选列表组件深入详解,这个是vue的基本组件,有需要的同学可以研究下...2021-03-03
- 在网页中,经常见到进度条效果,那么这些个性的进度条组件效果是怎么实现的呢,下面脚本之家小编给大家分享Bootstrap进度条组件知识详解,感兴趣的朋友要求学习吧...2016-05-04
- 思路其实没有那么复杂,把地图想成一个盒子容器,地图中心点想成盒子中心点;扎点在【地图中心点】不会动,当移动地图时,去获取【地图中心点】经纬度,设置某个位置的时候,将经纬度设置为【地图中心点】即可...2021-06-20
- 这篇文章主要为大家详细介绍了React列表栏及购物车组件使用,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-06-28
- 这篇文章主要介绍了react使用antd表单赋值,用于修改弹框的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-10-29
- 这篇文章主要为大家详细介绍了vue递归实现自定义tree组件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-08-20
- 这篇文章主要介绍了Vue父子组件传值的一些坑,帮助大家更好的理解和使用vue父子组件,感兴趣的朋友可以了解下...2020-09-16
- 这篇文章主要介绍了React Native 启动流程简析,文以 react-native-cli 创建的示例工程(安卓部分)为例,给大家分析 React Native 的启动流程,需要的朋友可以参考下...2021-08-18
- Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架,主要基于 HTML、CSS、JAVASCRIPT 的。接下来通过本文给大家介绍BootStrap 附加导航组件的知识,感兴趣的朋友一起学习吧...2016-07-29
- 这篇文章主要为大家详细介绍了C#控制台程序使用Log4net日志组件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-25
使用Angular CDK实现一个Service弹出Toast组件功能
本文主要写用cdk实现一个简单的Toast组件,使用的是cdk中的overlay模块,需要手动安装环境,具体安装方法及相关实现代码跟随小编一起看看吧...2021-07-28- 这篇文章主要为大家详细介绍了Bootstarp创建可折叠组件的对应方法,以实例为大家分享了Bootstrap折叠组件,感兴趣的小伙伴们可以参考一下...2016-02-26