React Hook钩子会取代类吗?

时间:2019-02-27 18:44:15

标签: reactjs react-hooks

现在React终于有了钩子,这最终将成为创建组件的新标准,还是仍然需要创建类组件?

我了解到,目前钩住can not accomplish everything a class can。例如,为getSnapshotBeforeUpdate和componentDidCatch提供生命周期方法的挂钩。但是,React团队表示他们计划尽快添加此功能。他们还提到React中有no plans to remove classes

因此,当支持所有生命周期方法时,是否有任何理由创建类组件?在这一点上,类仍然比功能组件更好地处理某些情况吗?

1 个答案:

答案 0 :(得分:4)

我要礼貌地不同意上面的评论。钩子是React的未来的100%。我强烈建议您阅读Dan Abramov在2018年10月写的Medium article。Dan Abramov文章的顶部还有一个视频,在最后一次React Conf上发表了主题演讲。他在讲话中第一次介绍了钩子。他在地址结尾处补充说,他不建议立即重构您的旧组件,但他确实建议使用向前移动的钩子(这是在钩子仍为Alpha版本的情况下):

  

我要求您不要用钩子重写整个应用程序...因为我个人认为开始用钩子思考需要花点时间,如果您只是尝试使用钩子,可能会有些混乱。类Component并进行转换,但我鼓励您尝试在正在编写的一些较新的代码中使用钩子,并让我们知道您的想法。

他接着说:

  

因此,在我们看来,挂钩代表了我们对React未来的愿景。但是,它们也代表了我们推动React前进的方式,那就是我们不做大的重写。而且,那就是我们希望将我们更喜欢的新模式与旧模式共存。

如果您观看整件事,他将对此进行更详细的讨论。我相信可以避免的是,Facebook和Dan Abramov认为钩子是React的未来(我也是,但我的看法并不重要)。他们认为从钩子中出现的模式比由Components类建立的模式好得多。他们还指出,他们之所以打算维护组件类是因为他们不打算重写React或引入重大更改。

由于使用了有状态函数,而不是扩展类,因此代码膨胀也更少了。挂钩直接挂钩到由React框架维护的全局应用程序状态,而不是通过抽象在本地维护它(这就是为什么将它们称为挂钩)的原因。挂钩通过custom hooks提升了代码的可重用性。挂钩允许我们通过useEffect来监视单个状态,而无需生命周期方法和条件。在类Components上使用钩子还有很多其他好处,但是我不想在这里写一本书。

除了列出的好处和Facebook团队的好评外,我还要指出所有添加了对钩子的支持的第三方库。您共享的FAQ page表示Redux和React Router都计划释放对钩子的支持。实际上,自从将Redux维护者介绍给公众以来,他们一直很兴奋discussing hooks。而且,Ryan Florence(React Router的创建者)在React Conf上的Dan Abrimov之后发表讲话。实际上,他对钩子给予了更大的认可:

  

Dan刚刚说过“不要用钩子重写您的应用程序”。我想你应该。

除这些以外,Material-UI version 4-alpha也已推出,他们也引入了钩子。

总而言之,钩子是React的未来,我们应该使用它们。自从React v16.8.0起,它们已经稳定发布,没有理由不继续使用它们。