EricElliott 译者
王强 编辑
Yonie自从React引入了HooksAPI以来,关于ReactHooks是否会取代Redux的讨论也越来越多了。本文作者认为ReactHooks不能取代Redux,并阐述了该观点的理由。
在我看来,Hooks和Redux之间几乎没什么重叠的使用场景。Hooks没那么神奇,没有什么全新的状态功能;它只是增强了React已有API本来就能做的那些事情而已。但hooksAPI提升了原生React状态API的可用性,而且它比被它取代的class模型更简单,所以有了hooks后我在合适的场景中使用组件状态的频率多了很多。
为了阐明我的观点,首先我们来探讨为什么Redux会是首选。
Redux是什么?Redux是一个可预测的状态管理库和架构,可以与React轻松集成。
Redux的主要优点有:
确定性状态视图(与纯组件结合时启用确定性视图呈现)。
事务状态。
状态管理与I/O和副作用隔离。
应用程序状态使用单一信息源。
在不同组件之间轻松共享状态。
事务遥测(自动记录操作对象)。
跟踪调试。
总的来说,Redux提供了强大的代码组织和调试能力。开发者可以使用它构建更易维护的代码,并且在出现故障时更快找到问题的根源。
ReactHooks是什么?开发者只要用ReactHooks就能使用状态和React生命周期中的众多功能,无需再用class和React组件生命周期方法。ReactHooks是React16.8中首次引入的。ReactHooks的主要优点有:
无需class也能在组件生命周期中使用状态和Hooks。
将相关逻辑集中起来放进组件,而不是把它们分散到各个生命周期方法中。
与组件实现(例如呈现prop模式)独立的共享可复用行为。
请注意,ReactHooks的这些吸引人的优点和Redux并没有重叠。你应该使用ReactHooks来获得确定的状态更新,但这也是React本身一直就有的功能,而Redux的确定性状态模型与它配合的很好。这就是React提供确定性视图呈现的手段,而且也是促使React诞生的动力之一。
现在有了react-reduxhooksAPI和React的useReducerhooks等工具,你用不着在Reacthooks和Redux之间二选一了。鱼与熊掌可以兼得,你应该两个都用,搭配起来干活儿。
Hooks取代了哪些技术?自从HooksAPI诞生之后,我不再使用的技术有:
class组件。
呈现prop模式。
Hooks不能取代的技术有哪些?我还在经常使用的技术有:
Redux,原因如前所述。
高阶组件(HigherOrderComponents),这些组件负责构成由全部或多数应用程序视图共享的交叉