更新记录

0.0.2(2024-02-04)

添加demo , 建议下载demo

0.0.1(2023-04-07)

0.0.1发布


平台兼容性

Vue2 Vue3
×
App 快应用 微信小程序 支付宝小程序 百度小程序 字节小程序 QQ小程序
app-vue app-nvue
钉钉小程序 快手小程序 飞书小程序 京东小程序
H5-Safari Android Browser 微信浏览器(Android) QQ浏览器(Android) Chrome IE Edge Firefox PC-Safari

网络请求状态 hooks 封装 , 只有vue 3能用


代码不是很复制建议下载示例, 运行一下, 看一下源码就懂了

基于react-query封装

基于vue 3 封装了页面加载 加载动画 加载失败界面, 失败后点击重试 加载成功后显示界面

请求接口 useQuery

const demoApi = async () => {
  await new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve("");
    }, 1000);
  });
  return {
    name: "请求成功" + new Date().valueOf(),
  };
};

const name1 = ref("");

// 模拟接口
const loadUserName1 = async () => {
  const apiData = await demoApi();
  name1.value = apiData.name + 1;
};

    //loadData -> 调用接口 
    //loader -> 加载状态
 const { loader, loadData } = useQuery(async (param: any) => {
   await loadUserName1()
 });
// loader -> 包含加载状态
interface Loader {
  isLoading: boolean;
  isLoaded: boolean;
  isError: boolean;
  errorMsg: string;
}

加载多个接口 useQuery

const { loader, loadData } = useQuery(async (param: any) => {
  await Promise.all([loadUserName1(), loadUserName2(), loadUserName3()]);
});

只更新一个数据 useQuery

const { loader, loadData } = useQuery(async (param: any) => {
    if (param?.key == "1") {
      return loadUserName1();
    }

  await Promise.all([loadUserName1(), loadUserName2(), loadUserName3()]);
});

// <fui-button @click="loadData({ param: { key: 1 } })">局部刷新 -> loadUserName1</fui-button>

页面下拉刷新 useQuery

const { loader, loadData } = useQuery(async (param: any) => {
    if (param?.key == "1") {
      return loadUserName1();
    }

  await Promise.all([loadUserName1(), loadUserName2(), loadUserName3()]);
});

onPullDownRefresh(() => {
  loadData();
});

修改数据 useMutation


const { mutate } = useMutation(async () => {
  await loadUserName1()
}, {
  onSuccess: () => {
    loadData()
  }
})

//<fui-button @click="mutate({confirm: true})">修改 确认提示</fui-button>
//<fui-button @click="mutate">修改 无确认提示</fui-button>

请求分页数据 useInfiniteQuery

// list 列表数据
// loader 加载状态 + 分页数据
// loadMoreData 加载下一页函数
// hasNextPage 判断是否存在下一页
// loadData 重新加载分页, 回到第一页
const { loader, list, loadMoreData, hasNextPage, loadData } = useInfiniteQuery(
  async (param) => {
    return demoApi();
  }
);

请求(tab)分页数据 useInfiniteQuery

请下载示例项目查看


const list1 = useInfiniteQuery(async (param) => {
  return demoApi(param);
});

const list2 = useInfiniteQuery(
  async (param) => {
    return demoApi(param);
  },
  {
    auto: false,
  }
);

const list3 = useInfiniteQuery(
  async (param) => {
    return demoApi(param);
  },
  {
    auto: false,
  }
);

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问