当前位置: 首页 > news >正文

封装一个请求的hook(react函数组件)

对于后台系统,上面筛选,下面表格分页的页面,这个hook非常实用
omitBy方法:过滤不为undefined的对象属性

export const omitBy = <T extends IObject, K extends keyof T>(object:T, predicate:(value:T[K]) => boolean):IObject => {if (typeof object !== 'object') {return object;}const newObject:IObject = {};Object.keys(object).forEach((item) => {if (predicate(object[item])) {newObject[item] = object[item];}});return newObject;
};
export const useFetchHook = (fetchPromiseFunc:(params?:any) => Promise<any>, params?:any, initialData?:any, deps?:ReadonlyArray<any>, fetchFlag?:boolean) => {const [data, setData] = useState(initialData);const [loading, setLoading] = useState(false);console.log('重新执行了该hook');// 处理对象参数:当value为空时,omit该参数const formattedParams = omitBy(params, (item) => item !== undefined );useEffect(() => {const fetchData = async() => {try {setLoading && setLoading(true);const result = await fetchPromiseFunc(formattedParams);if (result.status.toString() !== '200') {if(result.data.error_code) {//todo sth...} else if(result.data.statusText){message.error(result.data.statusText);} else if(result.data.msg) {message.error(result.data.msg || '接口异常');}} else {setData(result.data);}setLoading && setLoading(false);} catch (error) {setLoading && setLoading(false);}};if(fetchFlag === undefined || fetchFlag) {fetchData();}else {setData(initialData);}}, deps ? deps : []);return [data, loading];
};

使用

const [classData, loading] = useFetchHook(yourFetchFunc, { ...filterParams, ...paginationParams }, [], [filterParams, paginationParams, filterFlag]);

filterParams: 用在筛选条件
paginationParams:分页筛选
filterFlag:其他自定义筛选

http://www.lryc.cn/news/474968.html

相关文章:

  • c语言内存块讲解
  • 2024年10月23日Github流行趋势
  • YOLOv6-4.0部分代码阅读笔记-dbb_transforms.py
  • C++ 基础语法 一
  • B2020 分糖果
  • VBA字典与数组第二十讲:如何在代码运行时创建数组
  • 字符串统计(Python)
  • NVR小程序接入平台/设备EasyNVR多个NVR同时管理视频监控新选择
  • 怎样能把图片做压缩处理?学会4款在线工具高效压缩图片
  • ZooKeeper 客户端API操作
  • 常用滤波算法(一)-限幅滤波法
  • 江协科技STM32学习- P33 实验-软件I2C读写MPU6050
  • BusHound工具的使用-调试USB
  • Hadoop生态圈框架部署(四)- Hadoop完全分布式部署
  • Spring Boot 与 Vue 共铸卓越采购管理新平台
  • leetcode3. Longest Substring Without Repeating Characters
  • Mongodb使用视图连接两个集合
  • SIP是什么?
  • Day 39 || 01背包、416. 分割等和子集
  • 调用detr-resnet-50进行目标检测
  • Chromium 中chrome.fontSettings扩展接口定义c++
  • 在Unity游戏开发在面试时会面试哪些内容?
  • 刘艳兵-DBA022-以下关于Oracle半连接的描述,哪些是正确的?
  • 人工智能与伦理:我们应该如何平衡科技与人性?
  • CRON组件一个复杂的一个简单的
  • 自定义日志打成jar包引入项目后不生效
  • RK3568平台开发系列讲解(中断篇)延迟工作实验
  • RabbitMQ 的集群
  • 整车功能架构 --- 智能座舱
  • java stream流的使用