10分钟理解REACT概念
xsobi 2024-12-10 21:35 1 浏览
10分钟理解REACT概念
注意:这篇文章假定你熟悉模板技术,至少使用过像art-template或ejs这样的简单模板
当然,这意味着你应该具备一些JS基础,对DOM操作足够熟练
同时,这篇文章要求你具备基本的面向对象思想,不清楚的可参考视频教程(不懂装懂系列)
由于React特殊语法要求,这篇文章要求你需要熟悉ES6的面向对象语法
模板的作用?
例如下面这个模板:
我们准备好一份数据:
将数据填充至模板,生成HTML页面:
当数据频繁改变时,会带来什么问题?
每一次数据改变,我们都需要将最新的数据 重新 填充模板
然后将生成的HTML文本 重新 append到页面上进行渲染
我们不禁要问:难道没有更简单的方式?
于是我们有了下面的解决方案:
如果我们能将模板与数据绑定在一起,当数据变化时
自动填充模板并更新页面。
这样一来,我们只要操作数据,页面内容就可以实时产生变化了。
这就是react这个基于模板技术的框架给我们带来的好处。
React组件化到底是什么东西?
首先我们必须要先问一个问题。
什么是组件?
我们再回过头看刚才的那个模板,它可以称得上一个组件吗?
虽然这个模板是可复用的,但把它叫做一个组件,恐怕还远远谈不上。
为什么呢? 这还要看我们如何来定义,什么是组件?
所谓组件,指的是高度可复用的动态模板
而我们之前的模板,缺乏了3个重要的条件
- 第一,它没有做到数据绑定,当数据改变时,页面不能够自动更新。
- 第二,它无法保存页面中的交互动作。例如鼠标的划入、单击事件等等。
- 第三,模板和模板之间不能够相互嵌套或引用,无法达到复用的最大化。
而React编写的组件,搞定了上述所有问题。
为什么React标准语法推荐使用ES6?
这还得从我们的面向对象思想说起
我们都知道类和对象之间的关系
如果把类看作是一个模板,那么通过这个模板,我们可以无限次的 实例化(new)对象。
在面向对象当中,我们的类,就相当于一个高度可复用的组件
于是就有了下面的语法
我们使用Class来定义一个组件,每个组件必须有一个render方法用来渲染页面
而在render方法里,我们可以像往常一样编写我们的模板内容 ↓↓↓
不仅如此,我们连单击函数也保存在了组件当中 ↓↓↓
组件当中的数据,可以通过构造函数来进行传递。 ↓↓↓
最后,我们通过ES6的模块化语法,将该组件以模块的形式暴露出去,让别的组件可以引用。 ↓↓↓
引入组件之后,我们可以像写HTML标签那样,使用这个组件 ↓↓↓
上就是一个React组件的标准写法,是不是很简单呢?
React中的虚拟DOM是怎么一回事?
回到我们之前说的数据绑定的问题上来
假设,我们现在有一个组件,DOM结构如下
目前,虽然React已经可以做到,在数据改变时,页面可以自动的实时更新
但是 这仍然没能解决一个问题
当组件中任何一点小小的数据发生改变的时候,我们都需要将整个组件重新渲染一次,才能让页面更新。
这会给浏览器带来巨大的工作负担,很显然这也是不必要的。
于是,React引入了虚拟DOM技术
首先,在内存中构建一棵对象树,这棵树的结构跟DOM结构一致。
每个对象对应一个DOM节点,并保存这个节点的所有信息(理论上包括事件)
我们管这棵对象树,也叫做虚拟DOM树
接下来,当数据发生改变的时候,
React会再次生成一棵新的虚拟DOM树
接下来,React会扫描这两棵虚拟DOM树的节点
最终将所有发生改变的节点记录下来
最终React会将发生改变的DOM节点做更新,而不会更新整个组件
这就是虚拟DOM提升性能的原理。
总结一下React的特点:
- 上一篇:文本之form表单
- 下一篇:“彻底放弃 React!频繁更新和管理疲劳让我崩溃”
相关推荐
- 斗鱼针针成旻云个人资料 针针年龄身高演艺经历介绍
-
[闽南网]针针成旻云曾是七煌旗下签约艺人,经常在斗鱼进行直播身高超过170cm的她更因为有一双大长腿而被称为“斗鱼第一美腿”、“电竞第一腿”。本文这就来对针针的个人资料进行详细介绍,想知道她的年龄身高...
- 轻量级RTSP服务模块和RTSP推流模块适用场景区别
-
好多开发者一直搞不清轻量级RTSP服务SDK和RTSP推流SDK的区别,以下是相关区别:1.轻量级RTSP服务模块:轻量级RTSP服务解决的核心痛点是避免用户或者开发者单独部署RTSP或者RTMP服...
- 《新·奥特曼》11月18日国内视频平台上线
-
《新·奥特曼》海报。新京报讯11月14日,由上海新创华文化发展有限公司授权引进电影《新·奥特曼》宣布正式定档11月18日(周五)00:00上线视频平台,上线版本为日语配音中文字幕版。影片由庵野秀明(...
- 剑指Apple Watch!Android Wear也将支持视频功能
-
想必智能手表发展到现在,大家最期待的还是视频功能,近日AndroidWear就实现了这一功能,以后就能在手表上看视频了,想想就挺激动的,快来看看吧!其实早在WWDC大会上,老对手AppleWatc...
- QT应用编程:基于VLC开发音视频播放器(句柄方式)
-
一、环境介绍操作系统:win1064位QT版本:QT5.12.6编译器:MinGW32VLC版本:...
- OBS 源码分析 obs开发
-
本文将按照数据源的获取、渲染、推送的直播流程来让大家深入了解一下。1、直播源数据获取obs在启动时会优先加载libobs核心库,这个库初始化obs很多内容,包括crash模块、com、性能监...
- Android和iOS端Moments更新:支持视频分享功能
-
Moments是社交网络巨头Facebook推出的一款私人照片分享应用,今天公司宣布对Android端和iOS端应用同时升级,新增对视频分享功能的支持。事实上早在数周之前,Facebook就曾表示Mo...
- 您很快就可以在Android Galaxy设备之间传输视频通话
-
在阅读此文之前,辛苦点击右上角的“关注”,既方便您进行讨论与分享,又能给您带来不一样的参与感,感谢您的支持!导语:在科技领域,每时每刻都有新的发展,令人兴奋的创新不断涌现。早在八月份,Android系...
- 一篇文章带你FFmpeg到流媒体服务器开发
-
安装ffmpeg:下载FFmpeg和libx264的包ffmpeg-2.4.1.tar.bz2last_x264.tar.bz2libx264需要yasm,所以先安装yasmapt-getinst...
- YouTube 为 Android 平台提供 1440P 视频
-
安锋网8月10日消息,Android从起初的480P的屏幕分辨率发展到2014年的1440P花了将近六年的时间,一般认为1080P的屏幕分辨率已经是人眼可以识别的极限,但是...
- FFmpeg 调用 Android MediaCodec 进行硬解码(附源码)
-
FFmpeg在3.1版本之后支持调用平台硬件进行解码,也就是说可以通过FFmpeg的C代码去调用Android上的MediaCodec了。在官网上有对应说明,地址如下:trac....
- Android FFmpeg + OpenGL ES YUV Player
-
1、FFmpeg解出YUV帧数据1.1方法介绍打开封装格式上下文...
- 基于WebRTC的Android移动端无线视频传输
-
摘要:视频传输技术在现代社会广泛应用,人们对其的要求也越来越高,其发展的趋势是方便、快捷、随时随地。传统的视频传输过于依赖线路,线路的走向限制了传输的很多可能,所以无线传输才是发展的方向。本文提出...
- 使用python爬取抖音app视频 python爬取抖音视频数据
-
记录一下如何用python爬取app数据,本文以爬取抖音视频app为例。编程工具:pycharm...
- Android IOS WebRTC 音视频开发总结(七七)-- WebRTC的架构和协议栈
-
本文主要介绍WebRTC的架构和协议栈(我们翻译和整理的,译者:litie),最早发表在【编风网】为了便于理解,我们来看一个最基本的三角形WebRTC架构(见下图)。在这个架构中,移动电话用“浏览器M...
- 一周热门
- 最近发表
- 标签列表
-
- grid 设置 (58)
- 移位运算 (48)
- not specified (45)
- patch补丁 (31)
- strcat (25)
- 导航栏 (58)
- context xml (46)
- scroll (43)
- element style (30)
- dedecms模版 (53)
- vs打不开 (29)
- nmap (30)
- c 视频教程下载 (33)
- paddleocr (28)
- listview排序 (33)
- firebug 使用 (31)
- transactionmanager (30)
- characterencodingfilter (33)
- getmonth (34)
- commandtimeout (30)
- hibernate教程 (31)
- label换行 (33)
- curlpost (31)
- android studio 3 0 (34)
- android开发视频 (30)