Hooks的理解
Hooks的理解
何为Hooks
"hooks" 直译是 “钩子”。通常指
系统运行到某一时期时,会调用被注册到该时机的回调函数。
前端中的Hooks
在react@16之后,引入了一系列以“use”作为开头的方法
Hook 让你可以在组件中使用不同的 React 功能。这是react的官方文档的定义
React官方内置hooks可以分类为
- 状态Hook
useState声明了一个你可以直接更新的 state 变量。useReducer声明了一个带有更新逻辑的 state 变量在一个 reducer 函数 中。
- Context Hook
useContext读取并订阅一个 context。
- Ref Hook
useRef声明一个 ref。你可以在其中保存任何值,但最常见的是它用来保存一个 DOM 节点。useImperativeHandle可以让你自定义组件所暴露的 ref。一般很少使用。
- Effect Hook
useEffect将一个组件连接到外部系统。useLayoutEffect在浏览器重新绘制屏幕前执行。在这里,你可以测量布局。useInsertionEffect在 React 对 DOM 进行更改之前触发。在这里,库可以插入动态的 CSS。
- 性能Hook
useMemo让你缓存一个代价非常高的计算结果。useCallback让你在将一个函数定义传递给一个优化的组件之前缓存它。useTransition让你把一个状态转换标记为非阻塞,并允许其他更新中断它。useDeferredValue让你推迟更新用户界面的一个非关键部分,让其他部分更新。
- 其他Hook
useDebugValue允许你在 React 开发者工具中为自定义 Hook 添加一个标签。useId允许组件绑定一个唯一 ID。通常与可访问性 API 一起使用。useSyncExternalStore允许一个组件订阅一个外部 store。
- 自定义Hook
在React中,每个被命名为use+大写字母的函数就是一个hook,只能在函数组件中调用,只能在最顶层使用
为什么我们需要使用Hook
没有Hook之前的日子
在拥有Hooks之前,多用mixin来解决状态逻辑的复用
使用Hook进行状态的复用
相比于mixins,hook的优点在于
- 方法和属性好追溯
- 没有重名、覆盖的问题
- 多次使用
比class组件更加容易理解
在class组件中,this的绑定问题。代码量更少。
结尾
这里鸣谢