Hooks为什么会出现
跨组件复用stateful logic(包含状态的逻辑)十分困难
在hooks出现之前,我们想要复用包含状态的逻辑,可能会用到render props 或者高阶组件,但是这些模式都要求你重新构造你的组件,这可能会非常麻烦。你可以在React DevTool里看到我们的组件被层层叠叠的providers, consumers, 高阶组件, render props, 和其他抽象层包裹。使用Hooks,你可以在将含有state的逻辑从组件中抽象出来,这将可以让这些逻辑容易被测试。同时,Hooks可以帮助你在不重写组件结构的情况下复用这些逻辑。
处理生命周期函数造成的问题
当我们的组件变得越来越大时,会发现各种逻辑在组件中散落的到处都是,很复杂很乱。每个生命周期钩子中都包含了一堆互不相关的逻辑。比如我们常常在componentDidMount 和 componentDidUpdate 中拉取数据,同时compnentDidMount 方法可能又包含一些不相干的逻辑,比如设置事件监听(之后需要在 componentWillUnmount 中清除)。最终的结果是强相关的代码被分离,反而是不相关的代码被组合在了一起。这显然会导致大量错误。为了解决这个问题,Hooks允许您根据相关部分(例如设置订阅或获取数据)将一个组件分割成更小的函数,而不是强制基于生命周期方法进行分割。
解决掉class中this难以被理解的问题
class中this的指向通常难以明确,即使是计算机本身。而hooks是基于函数的,连class都不存在,那就更不谈this了。