APP下载

React将加入新功能Hooks取代类别

消息来源:baojiabao.com 作者: 发布时间:2024-05-14

报价宝综合消息React将加入新功能Hooks取代类别
图片来源: 

React

React现在有一个名为Hooks的新功能提案,可以让开发者在不撰写类别(Class)的情况下,使用状态和其他React的功能,但官方强调,现在并没有任何删除类别的计划,开发者不需要急着学习Hooks,而且Hooks也完全向后相容。有兴趣的开发者可以在React v16.7.0-alpha找到Hooks功能,现在社群也在开放RFC热烈讨论中,官方预计顺利将会在React v16.7中加入Hooks。

由于React没有提供附加(Attach)可重复使用行为到元件上的方法,进阶的使用者会在熟悉渲染工具或是高阶元件等模式,尝试解决这个问题,但是这些模式会要求开发者在使用的时候重构元件,这个过程可能很麻烦又或是让程式变得难以遵循。

在React DevTools中典型的应用程序,通常可以找到被戏称为包装器地狱的元件,包含着像是提供者、消费者、高阶元件、渲染工具以及其他抽象等各层,虽然可以在DevTools中以过滤器过滤掉这类元件,但官方表示,这也指出了更基本的问题,React显然需要一个更好的原语(Primitive)来共享状态逻辑。

而Hooks便是来填补这个功能上的空缺,开发者可以从元件中提取状态逻辑,以便可以独立测试并重复使用,Hooks允许开发者可以在不更改元件层次结构的情况下重用状态逻辑,如此便能更轻松的在许多元件或社群间分享Hooks。

元件从简单发展到复杂,不少会发生难以管理的状态逻辑灾难以及其他缺陷,每个生命周期的方法通常混合了不相关的逻辑,像是元件可能会在componentDidMount和componentDidUpdate中,提取一些资料,但是相同的componentDidMount方法,可能还包含一些设置事件监听器等不相关的逻辑,并在componentWillUnmount中执行清理。不相关的功能被组合在同一个方法中,将容易产生错误以及不一致的情况。

在许多情况下, 这些元件难以被分解成更小的元件,由于状态逻辑遍布在各处,也让测试变得困难,而这也是不少开发者更喜欢将React和单独的状态管理库结合的原因,但是如此又常会引入太多的抽象,让开发者需要在不同档案中跳转,使重用元件变得困难。

Hooks允许开发者根据相关的部分,像是设置订阅或是获取资料等功能,将一个元件拆分成较小的函式,而不是基于生命周期方法强制拆分,另外,开发者也可以选择使用Reducer管理元件的本机状态,使其更具可预测性。

官方提到,在他们的观察中,类别是初学者在学习React中最大的障碍,必须了解Class在JavaScript中运作的方式,而这部分与大多数语言有很大的不同,开发者通常能够很好地理解工具、状态以及资料流,但是却很常在类别中卡住,即便是在经验丰富的开发者间,也会对React的函式和类别元件间的使用区别存在分歧。

Svelte、Angular和Glimmer等框架展现了元件AOT编译的潜力,React也想在这部分跟进,最近官方开始尝试使用Prepack进行元件折叠(Component Folding),初始阶段获得很不错的结果,但同时也发现,类别元件可能导致最佳化的障碍,而在现今的工具上,类别也很难被良好的缩小,并使热重载不可靠。

Hooks提供开发者在没有类别的情况下,使用更多的React功能,从概念上来说,React元件更接近函式,Hooks能拥抱函式却又不牺牲React的实际精神。即便类别存在这么多问题,但官方强调,打算让Hooks能够涵盖所有类别使用案例,但目前并没有任何要删除React类别的计划。

开发者不需要现在就学习Hooks的使用方式,Hooks与既存程式码可以共同工作,开发者可以选择逐步采用。要在React增加原语的门槛很高,官方现在透过释出实验性的API,来获取社群中的回馈,有兴趣的开发者也可以从官方准备的RFC中获得更多的资讯。

2018-10-26 19:34:00

相关文章