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
版本添加的特性,并且通来渲染 元素来应用。现在通过渲染注释节点,你的样式可能会有一些错乱,尤其是当你使用了
:nth-child
这样的选择器。React
使用标签,一直在考虑如何
React
命中DOM
的实现细节。我们相信这些变化是安全的。另外,我们已经在许多典型的应用中看到这些变化在提升React
的性能。
组件现在也可以返回 null
我们在React v0.14
添加了定义无状态组件的功能。不管怎样,React 0.14
仍然允许你定义一个非继承React.Component
或者使用 React.createClass()
创建的组件。所以我们不能准确地判断你的组件是一个函数还是一个类,并且也不允许你从中返回一个null
。这个问题在React 15
中已经解决,你可以在你任何组件中返回null
,不管是函数还是类。
增加SVG
支持
所有的SVG
标签现在都已完美支持。(极少的标签在React.DOM
里不存在,但JSX
和React.createElement
支持所有标签名)。所有被浏览器支持的SVG
属性也全部支持。如果你发现少了什么属性,请给我们提 issue
。
本文翻译自 React v15.0