什么是挂钩?
2019年迎来了React 16.8.0和备受期待的Hooks的发布。 但是钩子是什么? 为什么需要它们?
Hooks是一个功能强大的新工具,它将使开发人员可以在功能组件中使用状态和其他各种React功能。 是的,您没有看错—尽管React是显式的,因为类并没有消失 ,但它们强烈建议开发人员离开类,以便实现状态和生命周期方法并在其位置使用Hooks。
“准备就绪后,我们鼓励您开始在编写的新组件中尝试使用Hooks。 确保团队中的每个人都在使用它们并熟悉本文档。 我们不建议您将现有的类重写为Hook,除非您计划以任何方式重写它们(例如,修复错误)……从长远来看,我们希望Hooks是人们编写React组件的主要方式。 ,或两者兼而有之?
Hooks打算解决哪些问题?
钩子不仅仅凭空出现; 它们的创建是为了解决在使用React开发时经常发生的三个问题,这些问题是Sophie Alpert和Dan Abramov在他们在React Conf 2018上的演讲的前20分钟概述的(可以在YouTube上找到演讲)。
挂钩旨在解决的三个主要问题如下:
- 太复杂了,无法在应用程序的不同组件之间重用“状态逻辑”
- 复杂的组件很快变得难以理解和调试
- 人和机器都难以解释类
确定这些问题很重要,但是如果您像我一样,可能还没有确信Hooks将解决您的所有问题。 如果Hooks确实是“在组件之间重用功能的强大而富有表现力的新方法”,那么我很高兴学习更多。
“ [Y]您可能会担心,我们只是将更多概念添加到React with Hooks中。 这是公平的批评。 我认为,尽管学习它们肯定会花费短期的认知成本,但最终结果将相反。” Dan Abramov,《 React Hooks的意义》
让我们暂停片刻,考虑一下这句话的内在偏见,因为Dan Abramov显然在证明他在创作时费力的东西的相关性。 话虽这么说,我当然认为值得对Hooks进行进一步调查,并暂时保留判断。
等待! 钩子并不能解决所有问题-还可以!
React期望Hooks功能会不断提高,他们特别指出,如果您现在熟悉React,以下生命周期将没有任何对应的Hook:罕见的getSnapshotBeforeUpdate和componentDidCatch 。 但是,他们确实希望在不久的将来增加它们的等效值。
现在,对于好东西,一些新的例子……
首先要注意的是,React 为Hooks指定了两个 规则 :
- 不要在循环,条件或任何嵌套函数内部调用Hook,只能在函数组件的最高级别使用它们。
- 您只能在功能组件中调用挂钩,也可以为应用程序编写自定义挂钩。
那就对了; 您可以编写自己的Hook,这将使您可以将组件逻辑抽象为可重用的函数。 以这种方式使用Hook最终应解决React在创建Hook时要修复的所有三个问题。 现在,在功能组件可以使用状态的情况下,目标是坚持“单一职责原则”,创建既简单又有状态的组件,从而无需类。
这是一个简短的五分钟视频,其中使用了两个新的Hook: useState和useEffect :
您可以通过阅读此处的文档进一步深入研究这两个示例。
资料来源
- React文档https://reactjs.org/。
- 丹·阿布拉莫夫。 “了解React Hooks”。2018年10月。https://medium.com/@dan_abramov/making-sense-of-react-hooks-fdbde8803889
- 马克西姆·伊万诺夫(Maksim Ivanov)。 “ React Hooks-如何使用useState和useEffect示例。” 2018年11月。https://www.youtube.com/watch?v=jK6nuBPfVIk