久违两年半主要版本更新,官方竟发布没有新功能的React 17!?

官方发布了最新React 17候选版,距离上个主要版本React 16已经有两年半,但是经过这么长的时间,官方却推延所有新功能,为的是将焦点摆在改善React本身版本升级上,从React 17开始支持渐进式升级,也就是说,开发者未来将可以对应用程序进行部分升级,而不用一次升级整个应用程序使用的React版本。

React 17并非一般的升级版本,因为没有添加任何给开发人员的新功能,官方提到,React 17是应用程序升级到未来React版本的垫脚石,使React能够安全地将React树,嵌入到另一个版本的React树中,而这将是他们推广React的关键战略。过去React升级必须采取全有或是全无策略,开发人员必需要选择,将整个应用程序升级使用React新版本,或是不升级继续使用旧版本,没有部分升级的选项。

不过,全有全无升级策略限制了React本身的发展,官方提到,当部分API变更,像是过时淘汰的上下文API,即便现在大部分应用程序都不再使用这个API,但是React还是必须提供支持,官方面临做选择,不是无限期地在React中继续支持,要不就不在新的React支持,让这些应用程序只能使用旧版React,但官方认为这两个选项都不好。

因此官方决定在React中支持逐步更新,当应用程序要从React 15升级到16,或是即将要把React 16的应用程序升级到17版,开发者会一次升级整个应用程序,官方提到,这样的方式适用于大部分的应用程序,但是对于那些有一点年纪,且没有被积极维护的应用程序,升级面临的挑战可能很大,过去尽管在页面上可以同时使用两个版本的React,但是仍然容易故障,可能会有事件处理上的问题。

在React 17中,官方已经解决了许多相关的问题,而这代表未来当开发者要将React 17应用程序,升级到React 18或是更高版本时,将会有更多选择,除了跟像过去一次升级整个应用程序之外,未来也能选择一次仅升级一部分,保留React 17上诸如延迟加载对话或是子路由等功能。

React开始提供逐步升级功能,这不代表鼓励开发者就要逐步更新应用程序,官方提到,一次完整升级应用程序仍然是最好的解决方案,加载两个版本的React,即便其中一个是按需加载,都并非理想的方法,但是对于不受积极维护的大型应用程序,逐步升级是可以考虑的升级方法,React 17能让这些应用程序不落伍。

为了要在React中支持渐进式更新,官方对React事件系统进行了一些更改(下图),由于这些更改可能使部分应用程序故障,因此官方将React 17订为主要版本,不过,事实上这个版本仅变更了React超过10万个组件中的不到20个,因此官方认为大部分的应用程序都能够顺利升级,而为了要降低升级的难度,因此官方也把所有本来要加入的新功能都延后,确保应用程序能够更简单地升级到React 17中,官方提到,如果连要升级到React 17都很困难了,渐进式更新也终将失败。