新人第025天---【译】React 16 beta中文文档

React 10 beta版发布了。翻译了官网上的文档,方便大家阅读。恳请大家批评指正。

原地址:https://github.com/facebook/react/issues/10294

React 16 beta版公测开始啦!🎉

安装指南

测试版已经在npm包中发布了,标签是“next”。 常规的npm安装将继续安装15.6版。要安装测试版需要使用以下命令:

yarn add react@next react-dom@next

或者:

npm install --save react@next react-dom@next

对你来说,React 16意味着什么?

React 16是第一个对React核心代码(之前的代号是“Fiber”)进行重写的版本。重写有以下几个目标:

  • 移除了一些旧的内部抽象,它们发展的不好,阻碍了内部变更。
  • 实现一些备受期待的功能,比如: 在render中返回数组、 组件错误恢复以及跟踪每个错误的可读组件堆
  • 开发者可以尝试对组件进行异步渲染,以获得更好的呈现效果

React 16.0主要关注与现有app的兼容性。目前还不支持异步渲染。在后期的 React 16.x版本的发布过程中,我们将加入异步模式的选择项。我们并不期待 React 16.0会给你的app带来多大的速度上的改变,但是我们却很关注你是否看到了进步,或者退步。

环境要求

React 16依赖于Map和Set这一类型集。如果你所支持的老式浏览器和设备本身不提供(如 <IE11),请考虑在你的应用bundle中加入一个全局polyfill,比如core-js或是babel-polyfill。

在使用core-js的React 16 的polyfill环境中,支持旧版本浏览器的写法如下:

import 'core-js/es6/map';
import 'core-js/es6/set';

import React from 'react';
import ReactDOM from 'react-dom';

ReactDOM.render(
  <h1>Hello, world!</h1>,
  document.getElementById('root')
);

React同样依赖于requestAnimationFrame(测试环境也是如此)。测试环境中,一个简单的shim如下:

global.requestAnimationFrame = function(callback) {
  setTimeout(callback, 0);
};

兴趣点

  • 这是对React完全的重写,但是我们还是期望能与你现有的代码兼容。如果你修复了15.x版本中引入的所有deprecation警告,那16beta版本就可以完美运行了。
  • 用户需要更新依赖于弃用或是不支持的API的第三方库以保证其在新版本下正常运行。现在正是对存在问题的库提出issue的好时机。
  • 我们尤其感兴趣的是来自于用户的关于15.x和16.x两个版本之间的不同表现的反馈。或许没有什么巨大变化,但是我们还是想听听有哪些进步或是退步。请在这里指出来!
  • 服务器渲染器被完全重写,现在提供一种流模式(现在通过react-dom/node-stream来实现不过未来可能会有变化)。服务器渲染器不再使用标记验证,而是尽量与已存在的DOM相关联,并对不一致发出警告。服务器渲染器的代码还很新,因此可能会存在issue。请在这里提出来。
  • React Native属于不同的发布周期,它的测试版本将在未来发布。

突破性变更

错误处理

  • 以前,runtime错误会使React的state终止并产生含混不清的错误。 React 16修复了这一点,引入了一种叫做“error boundaries”的特殊组件。Error boundaries能在组件树中捕获runtime错误,记录错误,同时显示一个备选UI。
  • 如果组件中存在未捕获的的错误,那么组件树中就不存在error boundary,那么整个组件树就会unmounted。这样做有利于避免那些脏bug打断UI的显示,但这也意味着开发者需要在app中添加一些error boundary来优雅地处理错误。
  • React 15对error boundaries也有支持,但未被写进文档,方法名也不同。React 15名叫unstable_handleError,现在更名为:componentDidCatch

点击这里了解更多关于错误处理行为的信息.

进程安排和生命周期

  • 现在,如果在一个生命周期的方法中使用ReactDOM.render() 和ReactDOM.unstable_renderIntoContainer() 则会返回null
  • 为了应对这一点,开发者可以使用the new portal API 或者是 refs.
  • setState:
    • setState为空将不会再触发更新。开发者可以在更新函数中决定是否需要重新渲染。
    • 在render中直接调用setState总是可以导致更新。这与之前不同。尽管如此,开发者还是不应该在render过程中调用setState。
    • setState回调(第二个参数)在componentDidMount / componentDidUpdate后会立即触发,而不是在所有组件渲染完成之后。
  • 当使用<A />替代<B />的时候, B.componentWillMount总是会在A.componentWillUnmount之前发生。以前,A.componentWillUnmount总是会在某些事件中首先结束。
  • 以前,更改一个组件的引用总会将其在调用组件渲染之前与组件分离。现在我们将其延后,在变化应用到DOM时才更改引用。
  • 使用除了React之外的工具更改容器内容并重新渲染是很不安全的。这样做虽然有效,但却从不受支持。现在,我们会对这种做法发出警告。开发者可以清空组件树并使用ReactDOM.unmountComponentAtNode. 参见此例.
  • componentDidUpdate生命周期不再接收prevContext参数。(参见 #8631

打包

  • react/lib/*react-dom/lib/*已经被移除了。即使在CommonJS环境中,React和ReactDOM都会被提前编译为一个单独的文件(“flat bundles”)。如果开发者之前依赖于非文件记录的内部构建,而他们现在又失效了,请在此issue下告知我们您的具体情况,我们会尝试为您提出迁移方案。
  • react-with-addons.js构建也被移除了。所有兼容性扩展在npm上分开发布,也有单文件浏览版本供开发者参阅。
  • 在15.x版本中引入的deprecations现在从核心包中移除了。React.createClass 现在改为 create-react-class, React.PropTypes 改为 prop-types, React.DOM 改为 react-dom-factories, react-addons-test-utils 改为 react-dom/test-utils, and shallow renderer 改为 react-test-renderer/shallow.参见15.5.015.6.0的博客,那里有介绍如何迁移代码并自动化codemods。
  • 单文件浏览构建的名称和路径发生了变化,为的是突出开发和发布的不同。比如:react/dist/react.js → react/umd/react.development.js
    • react/dist/react.min.js → react/umd/react.production.min.js
    • react-dom/dist/react-dom.js → react-dom/umd/react-dom.development.js
    • react-dom/dist/react-dom.min.js → react-dom/umd/react-dom.production.min.js
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,719评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,337评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,887评论 0 324
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,488评论 1 266
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,313评论 4 357
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,284评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,672评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,346评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,644评论 1 293
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,700评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,457评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,316评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,706评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,261评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,648评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,859评论 2 335

推荐阅读更多精彩内容