有人可以解释这两者之间有什么区别吗? 我的意思是除了语法差异,这两种技术都用来实现同样的事情(这是重用组件逻辑)吗?
答案 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对装饰器模式的解释不同。不幸的是,情况就是如此。我曾希望,与其重新定义现有术语,不如在限定条件的同时重用该术语。即使那是不可能的,发明一个不同的术语也会更容易接受。