React 16 升级总结

栏目: IOS · Android · 发布时间: 7年前

内容简介:目前 React 最新的版本是 16.7.0,基于全新的 React Fiber 架构,有众多激动人心的新功能。由于是大版本升级,考虑到业务的稳定性,我们团队大概等了一年的时间,终于鼓起勇气着手升级的事情,特以此文来记录升级过程中遇到的坑。这次升级的目标是将 React 从版本 15.6.2 升级到 16.2.0。原因是 16.2.0 为止引入了几个不错的新特性,同时对现有代码的影响会相对较小,风险可控。比较吸引我的三个新特性如下:react + react-dom is 109 kb (34.8 kb
  • 一、前言

目前 React 最新的版本是 16.7.0,基于全新的 React Fiber 架构,有众多激动人心的新功能。由于是大版本升级,考虑到业务的稳定性,我们团队大概等了一年的时间,终于鼓起勇气着手升级的事情,特以此文来记录升级过程中遇到的坑。

  • 二、升级的好处

这次升级的目标是将 React 从版本 15.6.2 升级到 16.2.0。原因是 16.2.0 为止引入了几个不错的新特性,同时对现有代码的影响会相对较小,风险可控。比较吸引我的三个新特性如下:

  • 文件大小减少30%。官网原文如下:

react + react-dom is 109 kb (34.8 kb gzipped), down from 161.7 kb (49.8 kb gzipped).

  • Error Boundaries ,可以将错误限制在可控范围,不会引起整个页面的白屏
class ErrorBoundary extends React.Component {
  constructor(props) {
    super(props);
    this.state = { hasError: false };
  }

  componentDidCatch(error, info) {
    // Display fallback UI
    this.setState({ hasError: true });
    // You can also log the error to an error reporting service
    logErrorToMyService(error, info);
  }

  render() {
    if (this.state.hasError) {
      // You can render any custom fallback UI
      return <h1>Something went wrong.</h1>;
    }
    return this.props.children;
  }
}

<ErrorBoundary>
  <MyWidget />
</ErrorBoundary>
  • Fragments ,可以在 render 返回多个一级组件,而不需要在外面包一个 div
const Fragment = React.Fragment;

<Fragment>
  <ChildA />
  <ChildB />
  <ChildC />
</Fragment>
  • 三、升级遇到的问题

1、依赖

项目中用到了 React Router 3 和 Redux。原计划将 Router 升级到 v4,但改动实在太大,放弃了,只是升级到支持 16 的版本。其它升级的依赖如下:

React 16 升级总结

2、React.PropTypes

这种写法已经不支持了,要改成:

// import { PropTypes } from 'React' 已废弃
import PropTypes from 'prop-types';

3、ReactDOM.render

在生命周期函数里面, ReactDOM.render 会返回 null ,因此类似下面这样的代码就会报错

function newInstance(props) {
  ...

  let loading = ReactDOM.render(<Loading {...props} />, div);
  return {
    show: loading.show,  // Error, loading 为 null
    container: div,
  };
}

4、setState(null) 不触发 render

如果需要强制刷新的话,可以使用 this.forceUpdate()

上述的问题主要是 16.0.0 带来的问题,更详尽的升级指南可以看 这里 的。

  • 总结

总体来说,升级没有遇到特别大的困难,主要就是针对官方文档的 Breaking changes 部分,进行全局搜索,然后进行修改。另外,还有可能依赖的库用到了已经不支持的 API,例如 PropTypes ,应对办法就是升级对应的库。

先聊到这里,有其它疑问,欢迎留言交流。


以上所述就是小编给大家介绍的《React 16 升级总结》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

引爆点

引爆点

[美] 马尔科姆·格拉德威尔 / 钱清、覃爱冬 / 中信出版社 / 2009-8 / 27.00元

我们的世界看上去很坚固,但在《纽约客》怪才格拉德威尔的眼里,只要你找到那个点,轻轻一触,这个世界就会动起来:一位满意而归的顾客能让新开张的餐馆座无虚席,一位涂鸦爱好者能在地铁掀起犯罪浪潮,一位精明小伙传递的信息拉开了美国独立战争的序幕——这个看起来不起眼的点,却是任何人都不能忽视的引爆点。 《引爆点》是一本谈论怎样让产品发起流行潮的专门性著作。书中将产品爆发流行的现象归因为三种模式:个别人物......一起来看看 《引爆点》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器