React js - HOC和装饰者之间有什么区别

时间:2018-02-08 13:38:05

标签: reactjs python-decorators higher-order-components

有人可以解释这两者之间有什么区别吗? 我的意思是除了语法差异,这两种技术都用来实现同样的事情(这是重用组件逻辑)吗?

3 个答案:

答案 0 :(得分:6)

出于所有实际原因,装饰者和HOC也做同样的事情。

一个主要的区别是,一旦你添加了一个装饰器,属性/类只能用在它的装饰形式中。 HOC模式和更高阶的组件可以使用。

有关装饰器的进一步阅读 - > https://medium.com/google-developers/exploring-es7-decorators-76ecb65fb841
装饰器不是广泛实现的JS功能。它仍处于提案阶段。默认情况下,Babel 7允许装饰器作为其阶段0配置中的默认插件。   https://babeljs.io/docs/plugins/transform-decorators/

答案 1 :(得分:2)

两个不同之处在于装饰器会用来改变变量,而建议不要使用HOC。另一个特定于React,HOC应该呈现一个组件,而装饰者可以根据实现返回不同的东西。

答案 2 :(得分:1)

我也很好奇,为什么React社区称这个高阶组件(HOC)而不是Decorator pattern,这似乎正是它正在做的事情,并且一直是{{3 }}。

另一个混乱的原因是described in 1994 (!) by the Gang of Four (GoF): Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides与GoF对装饰器模式的解释不同。不幸的是,情况就是如此。我曾希望,与其重新定义现有术语,不如在限定条件的同时重用该术语。即使那是不可能的,发明一个不同的术语也会更容易接受。