type
status
date
slug
summary
tags
category
icon
password
useUpadateEffect
- 何时使用(官方):等同于
useEffect
但是会忽略首次执行,只在依赖更新时执行
- 用法:与
React.useEffect
完全一致
- 场景:有时父组件会传props到子组件,子组件监听prop变化发起请求更新数据,但是不想第一次进就更新数据,而是当该prop后续变化时才发起请求,此时就适用useUpadateEffect
- 实现思路:利用
useRef
来暂存是否执行初次渲染的状态isMounted, 若isMounted为true,则执行勾子,若为false则不执行
- 源码
- useUpadateLayoutEffect 与 useUpdateEffect同理,唯一不同只是传参不同
usePrevious
- 用法:保存上一次状态的Hook
- 场景:想要获取状态更新后上一次状态的值时使用
- 实现思路:利用
useRef
来表示目前的值以及上次的值,若监听的值更新了,则现将目前的值赋值给上次的值并将最新的值赋值给目前的值
- 参数
参数 | 说明 | 类型 | 默认值 |
state | 需要记录变化的值 | T | - |
shouldUpdate | 可选,自定义判断值是否变化 | (prev: T | undefined, next: T) => boolean | (a, b) => !Object.is(a, b) |
- 源码
useUpdate
- 用法:强制使组件刷新
- 场景:想要强制组件重新渲染时使用
- 实现思路:勾子内部直接return一个update function, 当调用该方法时,会调用勾子触发渲染
- 源码
useLatest
- 用法:获取某个变量最新的引用
- 场景:防止闭包时使用
- 实现思路:利用ref.current始终保证该引用为最新
- 源码
useSize
- 监听DOM节点尺寸变化的hook
- 场景:需要获取动态容器高度时使用
- 实现思路:ref + onResize 获取高宽度
useCountDown
- 用法:实现一个管理倒计时的hook时使用
- 场景:手机验证码
- 实现思路:利用ref.current始终保证该引用为最新
- 源码
useVirtualList
- 用法:渲染虚拟列表时使用
- 场景:当需要一次性渲染一个很长列表时
- 参数
参数 | 说明 | 类型 | 默认值 |
originalList | 包含大量数据的列表 | T[] | [] |
options | 配置项 | Options | - |
Options
参数 | 说明 | 类型 | 默认值 |
containerTarget | 外面容器,支持 DOM 节点或者 Ref 对象 | () => Element | Element | MutableRefObject<Element> | - |
wrapperTarget | 内部容器,支持 DOM 节点或者 Ref 对象 | () => Element | Element | MutableRefObject<Element> | - |
itemHeight | 行高度,静态高度可以直接写入像素值,动态高度可传入函数 | number | ((index: number, data: T) => number) | - |
overscan | 视区上、下额外展示的 DOM 节点数量 | number | ㅤ |
返回值
参数 | 说明 | 类型 |
list | 当前需要展示的列表内容 | { data: T, index: number }[] |
scrollTo | 快速滚动到指定 index | (index: number) => void |
- 实现思路:
- 源码:
- 作者:NotionNext
- 链接:http://zhanghaoyu.top/article/b6a3ee92-e067-482a-9838-f0316f4b6066
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章