React版本更新及升级须知(持续更新)言先生

组件mounting时,React内部采用document.createElement来替代innerHTML,之前版本的React是生成一堆HTML字符串,再设置node.innerHTML。当时是因为在那时候所有支持react的浏览器中,innerHTML要比createElement速度要快,设置data-reactid也是为了便于react追踪虚拟DOM节点,配合innerHTML,但是带来的缺陷就是每次在render的时候,需要给每一个虚拟DOM节点重新绑定这个属性,实际上是很消耗性能的。但是之后随着浏览器的优化,情况不再如此,使用createElement之后,React速度更快,因此不再需要data-reactid这个属性,每一个节点都是通过React.createElement这个方法创建出来,所以对所有的节点都有控制权,在渲染时可以构建出直接映射,因此不需要通过绑定reactid来追踪节点。这是v15版本的最大亮点。

2,去除文本节点的多余span标签

之前版本对于文本节点的渲染,react默认会在文本节点外面添加一层span标签,比如

hello{this.props.name}
,该节点渲染成功时会看到内部出现了两个span标签,如果我们在节点内部本身就添加了span标签,对应的css样式里也有用span标签来区分关键字样式,那这样在渲染时容易导致冲突,而且本身就没有必要给不需要的节点添加不必要的标签。因此,React15版本去掉了额外的span标签。

3,全面支持SVG标签

支持所有由浏览器实现的SVG标签及属性。

4,关于null的render,用注释节点来表示

通过

5,功能性组件允许return一个null

之前无论是无状态组件或者是一个纯函数,都不允许返回一个null,但是15版本允许返回null了。

其他可能会涉及到的小的注意点:

React.cloneElement(),修复了如果传入未定义的props会返回未定义的元素,现在会有默认的defaultProps;

之前0.14版本已经弃用的方法全部删除,如果引用会报错;

允许data-名称以数字开头的属性等。

版本升级注意:总体来说,代码无需改动,不会影响编译,性能会有所提升,但是从15版本开始,ReactDOM不再支持IE8,解决方案找到两个:

1,es5-shim和es5-sham;

ReactV15.4.0

1,分离React和ReactDOM

React包目前只包含和React渲染无关的如React.Component和React.createElement()等内容,render则放到了react-dom包中。

2,新增ReactPerf

版本升级注意:ReactV0.14中如果使用ReactDOM.render()方法的需要改变,并且render已被分离到react-dom包中,引入时需要注意,其他并无大碍。

ReactV15.5.0

1,React.PropTypes迁移

在开发过程中,常常会用到Prop的type验证,ReactV15.4和之前都是直接从主React对象上访问,但是从15.5版本开始,需要引入prop-types包并从包里导入。

2,React.createClass不再推荐使用

从15.5.0版本开始,React.createClass推荐改为引入create-react-class包,因为ES2015以前并未将类作为语言的一部分,所以暂时使用了React自身提供的React.createClass,然而随着ES2015关于类的引入,JavaScript类现在是在React组件中创建组件的首选方式。

React.PureComponent来代替react-addons-pure-render-mixin和react-addons-shallow-compare,这两个包之前在性能优化方面会用到。

版本升级注意:React.createClass已不再推荐使用,但这时候如果还是用的该方法,也不会报错,但是后续新版本会出错,这个后面会提到;还有就是PropTypes的引入,这个需要改动,其他无影响。

ReactV15.6.0

style属性中添加对css变量的支持。

ReactV15.6.2

CSS列不再附加px后缀。

ReactV16.0

1,render函数下的return类型新增:fragments和strings

之前版本每次render后的return都必须用一个div包裹住或者是一个自定义组件,现在不再需要包在一个里面,而是可以直接返回一个数组(数组还是需要添加key属性,便于diff算法),或者是一个字符串。

2,错误处理的改变

之前在渲染过程中如果运行出现错误,会导致React直接奔溃,甚至会展示出一些错误信息在界面上,React16的错误机制是一旦渲染过程中或者生命周期中出现错误,整个组件树会从根目录下卸载,防止显示损坏的数据。

3,更好的服务器端渲染

服务端渲染是15版本的3倍,配合8.4版本的Node,大概有3.8倍

4,支持自定义的DOM属性

之前版本会直接忽视掉无法识别的HTML属性,而现在会直接传递给DOM,减少文件大小。

5,减小文件大小

react包:从20.7kb(6.9kbgzipped)降低到5.3kb(gkbip2.2kb)

react-dom包:从141kb(42.9kbgzipped)降低到103.7kb(32.6kbgzipped)

react+react-dom包:从161.7kb(49.8kbgzipped)降低到109.7kb(34.8kbgzipped)

与之前版本相比,相当于缩小了32%(gzip的30%)

6,componentDidCatch的推出

可以在子组件树种的任何位置捕获js错误,并且记录错误,并且显示备用UI而不是崩溃的组件树,这个相比于从根组件全部卸载的错误处理要更优。

setState在render的过程中会导致更新,所以绝对不能在渲染过程中使用setState,以前使用可能不会出错,现在应该会造成栈溢出;

componentDidUpdate不再接收prevContext参数;

React16依赖于Map类型和Set类型,如果需要支持旧版的浏览器,需要单独引入这两个,可以借助core-js或者babel-polyfill这两个库,用法如下:

版本升级注意:从15版本升级到16版本,原有的写法不会有问题,但是需要引入map和set语法来支持旧版浏览器,其他就是一些新写法的更新,可以调整代码进行优化,如果不调整也不会有问题。

ReactV16.2

1,Fragments的升级

Fragments在上个版本已经支持,但是并未有大的改进,在此版本中,Fragments的升级是一大亮点。先看一段HTML:

在16.0版本以前,如果我们要在React中render,唯一的方法是将他们包裹在一个div中,而ReactV16.0开始支持返回数组形式,则可以写成以下方式:

需要注意的是,数组中必须以逗号分隔,必须带key属性,字符串必须用引号括起来。

但是上面这种写法体验不是很好,所以16.2版本推出了Fragment组件(React.Fragment):

当然,也可以用Fragment来包裹其他自定义组件。还有一种写法是用JSX片段语法<>,但是这种写法是不支持任何属性的,包括key属性,而Fragment目前唯一支持的属性就是key:

如果配合eslint,上面这种JSXFragments写法需要eslint版本升级到3.x,babel-eslint升级到7,在.eslintrc文件中确保添加了“parser”:“babel-eslint”;

版本升级注意:16.2仅仅是在16.0基础上新增了对Fragment的提升,其它没有大改动。

总结:React从目前版本V0.14.8更新至最新版本V16.2.0,会经历两次较大的版本更新,一个是15.0,一个是16.0。

较大的优化是:性能的提升,渲染速度的提升,对异常的处理更优,以及包的大小减小,

带来的影响是:IE8的不支持(目前有解决方案),部分写法的废弃,部分引入包的更改。

THE END
1.驾校一点通2023最新版免费下载驾校一点通app手机下载安装一款在线学习软件,全面支持科目一、科目四等在线学习,官方题库命题率超高,在线刷题随时随地学习无障碍,多种练习方式快速提升学生学习能力,支持在线找驾校功能,附近家校信息详细显示,评分信息一目了然,快速的帮助用户通过驾考,小编为大家整理了驾校一点通安卓版、驾校一点通苹果版、驾校一点通电脑版、驾校一点通修改版等http://www.downcc.com/k/jxydt/
2.驾考一点通全国通用驾驶员理论考试 --- 驾驶证考试包含: 1、小汽车(C1/C2/C3) 2、货车(A2/B2) 3、客车(A1/A3/B1) 4、摩托车(D/E/F) 5、恢复驾驶资格资格证考试包含: 1、客运 2、货运 3、危险品 4、教练员 5、出租车 软件主要功能: 1https://www.microsoft.com/zh-cn/p/%E9%A9%BE%E8%80%83%E4%B8%80%E7%82%B9%E9%80%9A/9nblggh09zsl?cid=periscope
3.驾考一点通老旧版本大全所有历史官方版安装下载驾考一点通历史版本大全是豌豆荚小编为你精心挑选的所有驾考一点通旧版本下载专区,包括 驾考一点通v8.1.13、 驾考一点通v8.1.12、 驾考一点通v8.1.11 等一直以来官方更新的正式版,测试版本及经典版合集大全,喜欢低版本的操作界面,没有被最新版本限制的功能体验的朋友不要错过哦! 此合集大全后续也会持续更新,喜欢老https://m.wandoujia.com/apps/7661089/history
4.智慧教练app下载智慧教练v1.4.2最新版分类:学习教育 大小:42.1M 语言:中文 版本:v1.4.2 最新版 时间:2021-12-16 14:24 星级: 官网:暂无 厂商:上海肩并肩电子科技有限公司 平台:Android 标签:学车必备驾考教学服务平台。应用截图应用介绍 智慧教练app是一款专为广大教练提供管理学员的平台,在这里安排学员练车十分的方便,还能进行学员预约考试,便捷的https://www.qqtn.com/azsoft/597146.html
5.小米笔记本电脑RubyOC版本:v 0.9.1 日期:2023年05月11日 下载:EFI v 3.0【支持macOS 14 Sonoma】 OC版本:v 0.9.5 日期:2023年10月11日 建议:安装「macOS Catalina(10.15)」以及「macOS 12 Monterey」 EFI说明:这将会是我更新的最后一版EFI,毕竟这是2019年的机器,不建议安装macOS13及后续更高版本了,因为这电脑配置已经有点https://blog.csdn.net/l992625380/article/details/109597900
6.Notebook15bc405TX15.6英寸游戏本笔记本电脑(I5苏宁易购为您提供AppleXV2轻薄本和惠普(HP)光影精灵傲腾版Pavilion Notebook 15-bc405TX15.6英寸游戏本笔记本电脑(I5-8300H 1TB+16GB 1050 2G)参数对比,让您了解AppleXV2轻薄本和惠普(HP)光影精灵傲腾版Pavilion Notebook 15-bc405TX15.6英寸游戏本笔记本电脑(I5-8300H 1TBhttps://www.suning.com/prdCom/0070175026-826161387_0000000000-10559075809_0-0_0-0.html