React-v15.0升级指南

React-v15.0升级指南

主要变化

加入document.createElement 并且废弃 data-reactid

经过我们讨论,DOM 有很大的改变。其中最值得关注的一个变化就是,我们不再给每个 DOM设置data-reactid属性。虽然这更难看出一个网页是否使用了 React,但优势是DOM更轻量了。这一改变让我们使用 document.createElement来初始渲染成为可能。在此之前,我们会生成大量的HTML字符串,然后使用 node.innerHTML来插入。当时,我们决定尽快在大部分案例和支持的浏览器中使用document.createElement。浏览器持续地改善,因此兼容所有浏览器不再是正确的。使用 createElement可以让React的其他功能运行得更快。原来的ids用来映射React组件的事件,这意味着,我们不得不对每一个事件做很多工作,即使我们尽可能地缓存这些数据。正如我们遇到过的,缓存和缓存失效很容易出错,我们发现许多问题都无法重现。现在我们在渲染的时候可以直接建立映射,因为我们有了节点的钩子。

data-reactid仍然存在于服务端渲染中。不管怎样,这已经比以前要小很多了,并且这只是一个简单的自增计数器。

不再有额外的 标签

另一个关于DOM讨论的重大变化是如何渲染文本块。之前你可能关注到React渲染了很多额外的标签。举个例子,我们在主页渲染

Hello {this.props.name}
,结果包含了两层标签。现在我们渲染时使用注释节点穿插在普通文本外来划分。这让我们同样拥有更新部分文本的能力,而不用额外的标签。很少人会这些真实的额外标签有依赖,所以你很可以不会受到任何影响。但是如果你在样式文件中对标签有定义,你可能需要作出相应的调整。你仍然可以在你的组件里显式地指定渲染这些标签。

现在使用注释节点渲染 null

我们还利用注释节点来渲染null。渲染null是我们在React v0.11版本添加的特性,并且通来渲染

组件现在也可以返回 null

我们在React v0.14添加了定义无状态组件的功能。不管怎样,React 0.14仍然允许你定义一个非继承React.Component或者使用 React.createClass()创建的组件。所以我们不能准确地判断你的组件是一个函数还是一个类,并且也不允许你从中返回一个null。这个问题在React 15中已经解决,你可以在你任何组件中返回null,不管是函数还是类。

增加SVG支持

所有的SVG标签现在都已完美支持。(极少的标签在React.DOM里不存在,但JSXReact.createElement支持所有标签名)。所有被浏览器支持的SVG属性也全部支持。如果你发现少了什么属性,请给我们提 issue

本文翻译自 React v15.0

0%