资讯专栏INFORMATION COLUMN

React 16 升级总结

jubincn / 2635人阅读

摘要:二升级的好处这次升级的目标是将从版本升级到。,可以在返回多个一级组件,而不需要在外面包一个三升级遇到的问题依赖项目中用到了和。另外,还有可能依赖的库用到了已经不支持的,例如,应对办法就是升级对应的库。

欢迎关注我的公众号睿Talk,获取我最新的文章:

一、前言

目前 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,可以将错误限制在可控范围,出错时组件可以展示应对错误的 UI。

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 

Something went wrong.

; } return this.props.children; } }

Fragments,可以在 render 返回多个一级组件,而不需要在外面包一个div

const Fragment = React.Fragment;


  
  
  
三、升级遇到的问题

1、依赖
项目中用到了 React Router 3 和 Redux。原计划将 Router 升级到 v4,但改动实在太大,放弃了,只是升级到支持 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(, div);
  return {
    show: loading.show,  // Error, loading 为 null
    container: div,
  };
}

4、setState(null) 不触发 render
如果需要强制刷新的话,可以使用this.forceUpdate()

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

四、总结

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

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/100466.html

相关文章

  • React-生命周期杂记

    摘要:前言自从发布之后,更新速度日新月异,而生命周期也随之改变,虽然原有的一些生命周期函数面临废弃,但理解其背后更新的机制也是一种学习在这里根据官方文档以及社区上其他优秀的文章进行一个对于生命周期的总结,大致上分为以下三个模块新老生命周期的区别为 前言 自从React发布Fiber之后,更新速度日新月异,而生命周期也随之改变,虽然原有的一些生命周期函数面临废弃,但理解其背后更新的机制也是一种...

    KoreyLee 评论0 收藏0
  • react + koa2实现的论坛

    摘要:页面预览页面主要分为话题列表页消息页面个人信息页面创建话题页面个人设置页面注册页面登陆页面页面。还有权限方面的,比如登陆后不可以再进入登陆页面,未登陆也不可以进入创建主题页面。没有使用,但推介使用,不然性能不好。 技术栈 线上地址:点击查看 (访问会有点慢,至于原因,下面会说明)前端(主要):reactv15.6.1、react routerv4.2.0、reduxv3.7.2、ant...

    jk_v1 评论0 收藏0
  • 【腾讯Bugly干货分享】React Native项目实战总结

    摘要:本文来自于腾讯开发者社区,非经作者同意,请勿转载,原文地址小时内拼工作,小时外拼成长这是大家共同的理想。每周都会举行嘉宾分享,话题讨论等活动。上一期我们邀请了腾讯工程师王少鸣分享了项目实战总结。 本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/577e16a7640ad7b4682c64a7 8小时内拼工作,8小时外...

    张利勇 评论0 收藏0
  • 前端每周清单年度总结与盘点

    摘要:前端每周清单年度总结与盘点在过去的八个月中,我几乎只做了两件事,工作与整理前端每周清单。本文末尾我会附上清单线索来源与目前共期清单的地址,感谢每一位阅读鼓励过的朋友,希望你们能够继续支持未来的每周清单。 showImg(https://segmentfault.com/img/remote/1460000010890043); 前端每周清单年度总结与盘点 在过去的八个月中,我几乎只做了...

    jackwang 评论0 收藏0
  • 前端每周清单第 34 期:Vue 现状盘点与 3.0 展望,React 代码迁移与优化,图片优化详论

    摘要:工程实践立足实践,提示实际水平内联函数与性能很多关于性能优化的文章都会谈及内联函数,其也是常见的被诟病为拖慢性能表现的元凶之一不过本文却是打破砂锅问到底,论证了内联函数并不一定就会拖慢性能,过度的性能优化反而会有损于应用性能。 showImg(https://segmentfault.com/img/remote/1460000011481413?w=1240&h=825); 前端每周...

    CoderStudy 评论0 收藏0

发表评论

0条评论

jubincn

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<