ahooks——一个好用的hooks组件库
ahooks简介
ahooks是由蚂蚁 umi 团队、淘系 ice 团队以及阿里体育团队共同建设的 React Hooks 工具库。
它正致力成为和 antd/fusion 一样的 React 基础设施,帮助开发者在逻辑层面省去大量的重复工作。
核心useRequest的基础用法
默认请求
1
const { data, error, loading } = useRequest(service);
第一个参数是一个异步函数,在组件初始化时,会自动执行该异步函数。同时自动管理该异步函数的 loading , data , error 等状态。
手动触发
1
2
3
4
5
6
7const { loading, run, runAsync } = useRequest(service, {
manual: true
});
<button onClick={run} disabled={loading}>
{loading ? 'Loading' : 'Edit'}
</button>
设置了 options.manual = true,则 useRequest 不会默认执行,需要通过 run 或者 runAsync 来触发执行。
Q:run 与 runAsync 的区别
生命周期
在异步函数的不同阶段做一些处理
- onBefore:请求之前触发
- onSuccess:请求成功触发
- onError:请求失败触发
- onFinally:请求完成触发
刷新
使用refresh代替run
refresh 与 refreshAsync 的区别与run一致
立即变更数据
mutate支持立即修改返回的数据,用法与setState一致
取消响应
cancel函数用于忽略当前promise返回的数据和错误
注意:调用cancel函数并不会取消promise的执行
useRequest的具体应用
1、Loading Delay
1
2
3
4
5const { loading, data } = useRequest(getUsername, {
loadingDelay: 300
});
return <div>{ loading ? 'Loading...' : data }</div>
若在300ms内展示,则不显示loading···
2、轮询
1
2
3const { data, run, cancel } = useRequest(getUsername, {
pollingInterval: 3000,
});
每隔3000ms自动请求一次getUsername
可通过cancel停止、run启动
3、ready
1
2
3
4
5
6const [ready, { toggle }] = useToggle(false);
const { data, loading } = useRequest(getUsername, {
ready,
//manual: true 手动模式
});
只有当ready为 true 时,才会执行
4、依赖刷新
1
2
3
4
5const [userId, setUserId] = useState('1');
const { data, run } = useRequest(() => getUserSchool(userId), {
refreshDeps: [userId],
});
1
2
3
4
5const { data, refresh } = useRequest(() => getUserSchool(userId));
useEffect(() => {
refresh();
}, [userId]);
切换userId后立即刷新
5、屏幕聚焦重新请求
1
2
3const { data } = useRequest(getUsername, {
refreshOnWindowFocus: true,
});
再次进入当前页面,如果和上一次请求间隔大于 5000ms 则会重新请求一次
6、防抖
1
2
3
4const { data, run } = useRequest(getUsername, {
debounceWait: 300,
manual: true
});
频繁触发run,只会在最后一次触发结束后等待 300ms 执行。
7、节流
1
2
3
4const { data, run } = useRequest(getUsername, {
throttleWait: 300,
manual: true
});
频繁触发run,只会每隔 300ms 执行一次。
8、缓存
cacheKey:将当前请求成功的数据缓存起来。
staleTime: 设置数据保持新鲜时间,在该时间内不会重新发起请求。
cacheTime: 设置数据缓存时间,超过该时间自动清空该条缓存数据。