数据处理
- *对象数据处理, useSetState: 常用于由多个相同或相似属性组成的对象维护方式, 参考 我应该使用多个或单个变量维护 state(虽然官方推荐切分多个state 维护)
- *获取历史数据
- *数组
- useDynamicList: 动态添加/删除/编辑等操作的列表 ahooks
- useList: 类似队列操作的数组
- useStateList: 包含类似上一步 下一步的迭代器形式数组
- *Set 数据结构处理, 参考如何在 React setState 中使用 ES6 Set 以下两种处理方式不通
- *Map 结构处理, 参考如何在 state 中使用 Map
其他的一些常用数据结构也可适当封装, 如队列, 栈 列表, 树
- useQueue
- useStack
- useTree
事件处理
通用事件
- *底层通用添加监听事件的方式, 比如 useEvent / useEventListener 等可作为底层, 上层可以扩展 useHover / useMouse 等鼠标移动事件 以及一些如 hashchange / storagechange 事件的处理
- useEventListener: 通过这种方式可自定义任何事件的监听处理方式,作为事件底层处理方式,比如后续的 useMouse 等
- 针对通过 event 触发设置的值, 如 Input Switch Radio 等
- ahooks: useEventValue
- 360-hooks: useChange: 可参考
浏览器
*useDocumentVisibility: 常用于一些轮询业务处理上,切换浏览器 Tab 需要停止轮询,
- 缺点:数据中途或缺失,比如日志
- 优点: 多个轮询并行时减少不必要的请求, 如仅维护任务状态时切换浏览器 Tab 不必要
- 滚动条宽度获取
节点/窗口
- *滚动事件(scroll)监听
- useHover: 用于监听鼠标是否进入某个节点内, ahooks
- *节点大小变化处理
- ahooks/useSize: 通过原生 ResizeObserver 实时获取节点的大小
- react-use/useSize
- *全屏 fullScreen 都是通过第三方包实现
节点是否在可视区域
- ahooks: useInViewport(利用的是内置的 intersetion Observer)
- react-use/useIntersion
缓存
*cookie:主要用于针对 cookie的一些处理, 都通过 js-cookie 第三方包进行处理
*stroage: 包含了一些本地缓存的方式 localStorage 和 sessionStorage
react-use
ahooks
- useThrottle / useThrottleEffect(异步执行的 effect)
- useDebounce / useDebounceEffect
定时器
针对 setInterval 和 settimeout 处理
*useInterval
*useTimeout
- ahooks/useTimeout
- react-use/useTimeout
生命周期
内置的 useEffect 和 useLayoutEffect 上层的封装
*忽略首次执行的钩子
- ahooks: useUpdateEffect | useUpdateLayoutEffect
- *深度比较的生命周期, useEffect 和 useLayoutEffect 的第二个参数都是通过浅比较知性
- ahooks: useDeepCompareEffect
- *扩展的异步操作
- ahooks: useAsyncEffect
- *强制组件渲染
- ahooks: useUpdate
参考
- Awesome React Hooks:
**React Hooks**
相关清单 - chakra-ui: 除了 components 还包含一些 hooks