版博士V2.0程序
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. [English](./README.md) | 简体中文
  2. <p align="center">
  3. <a href="https://www.attojs.com">
  4. <img
  5. width="150"
  6. src="https://raw.githubusercontent.com/AttoJS/art/master/vue-request-logo.png"
  7. alt="VueRequest logo"
  8. />
  9. </a>
  10. </p>
  11. <h1 align="center">VueRequest</h1>
  12. <div align="center">
  13. <p align="center">⚡️ 一个能轻松帮你管理请求状态(支持SWR,轮询,错误重试,缓存,分页等)的 Vue 3 composition API 请求库</p>
  14. <a href="https://codecov.io/github/attojs/vue-request?branch=master">
  15. <img
  16. src="https://img.shields.io/codecov/c/github/attojs/vue-request?token=NW2XVQWGPP"
  17. alt="Coverage Status"
  18. />
  19. </a>
  20. <a href="https://www.npmjs.com/package/vue-request">
  21. <img src="https://img.shields.io/bundlephobia/minzip/vue-request/latest" alt="Size" />
  22. </a>
  23. <a href="https://www.npmjs.com/package/vue-request">
  24. <img src="https://img.shields.io/npm/v/vue-request" alt="Version" />
  25. </a>
  26. <a href="https://www.npmjs.com/package/vue-request">
  27. <img src="https://img.shields.io/github/languages/top/attojs/vue-request" alt="Languages" />
  28. </a>
  29. <a href="https://www.npmjs.com/package/vue-request">
  30. <img src="https://img.shields.io/npm/l/vue-request" alt="License" />
  31. </a>
  32. <a href="https://github.com/AttoJS/vue-request/stargazers">
  33. <img src="https://img.shields.io/github/stars/attojs/vue-request" alt="Star" />
  34. </a>
  35. <a href="https://www.npmjs.com/package/vue-request">
  36. <img src="https://img.shields.io/npm/dm/vue-request" alt="Download" />
  37. </a>
  38. </div>
  39. ## 为什么选择 VueRequest
  40. 在以往的业务项目中,常常被 loading 状态的管理、请求的节流防抖、接口数据的缓存、分页等这些重复的实现所困惑。每当开启一个新项目时,我们都得手动去处理以上这些问题,这将是一个重复性的工作,而且还得确保团队的一致。
  41. VueRequest 旨在为开发者提供便捷、快速的方式来管理接口的状态。在业务开发中省去上述的那些“脏活累活”,只需要简单的配置即可使用,专注于业务核心的开发。
  42. ## 特性
  43. - 🚀 &nbsp;所有数据都具有响应式
  44. - 🔄 &nbsp;轮询请求
  45. - 🤖 &nbsp;自动处理错误重试
  46. - 🗄 &nbsp;内置请求缓存
  47. - 💧 &nbsp;节流请求与防抖请求
  48. - 🎯 &nbsp;聚焦页面时自动重新请求
  49. - ⚙️ &nbsp;强大的分页扩展以及加载更多扩展
  50. - 📠 &nbsp;完全使用 Typescript 编写,具有强大的类型提示
  51. - ⚡️ &nbsp;兼容 Vite
  52. - 🍃 &nbsp;轻量化
  53. - 📦 &nbsp;开箱即用
  54. ## 文档
  55. - [English](https://www.attojs.org/)
  56. - [中文文档](https://www.attojs.com/)
  57. ## 安装
  58. 你可以通过 [NPM](https://www.npmjs.com/)、[YARN](https://yarnpkg.com/) 或者通过 `<script>` 的方式引入 [unpkg.com](https://unpkg.com/) 上的包。
  59. ### NPM
  60. ```sh
  61. npm install vue-request
  62. # or
  63. yarn add vue-request
  64. ```
  65. ### CDN
  66. > 对于生产环境,我们推荐链接到一个明确的版本号和构建文件,以避免新版本造成的不可预期的破坏。
  67. ```html
  68. <script src="https://unpkg.com/vue-request/dist/vue-request.min.js"></script>
  69. ```
  70. 一旦你在页面中添加了它,你就可以在 `window.VueRequest` 中访问我们导出的方法。
  71. ## 示例
  72. ```vue
  73. <template>
  74. <div>
  75. <div v-if="loading">loading...</div>
  76. <div v-if="error">failed to fetch</div>
  77. <div v-if="data">Hey! {{ data }}</div>
  78. </div>
  79. </template>
  80. <script lang="ts">
  81. import { defineComponent } from 'vue';
  82. export default defineComponent({
  83. setup() {
  84. const { data, loading, error } = useRequest(service);
  85. return {
  86. data,
  87. loading,
  88. error,
  89. };
  90. },
  91. });
  92. </script>
  93. ```
  94. 在这个例子中,`useRequest` 接收了一个 `service` 函数。`service`是一个异步的请求函数,换句话说,你可以使用 **axios** 来获取数据,然后返回一个 **Promise**。更具体的说明可以在[文档](https://www.attojs.com/guide/documentation/dataFetching.html)中查看。
  95. `useRequest` 还返回了三个值, `data`、`loading` 和 `error`。当请求还没完成时, `data` 将会为 `undefined` 同时,`loading` 将被设置为 `true`。当请求完成后,则将会根据请求结果来设定 `data` 和 `error`,并对页面进行渲染。这是因为 `data`、 `loading` 和 `error` 是 Vue 的 [响应式引用(Refs)](https://v3.cn.vuejs.org/guide/reactivity-fundamentals.html),它们的值将根据请求状态及请求结果来修改。
  96. ## 一些很酷的特性
  97. VueRequest 有非常多的特性,如 错误重试、缓存、分页、节流、防抖...,这里列举两个个比较酷的特性
  98. ### 1.聚焦页面时自动重新请求
  99. 有些时候,你要确保多个浏览器窗口之间数据的一致性;又或者是当用户电脑在休眠状态重新激活后,页面的数据需要同步到最新状态时。`refreshOnWindowFocus` 可能会为你节省很多逻辑代码。[点击这里直达文档](https://www.attojs.com/guide/documentation/refreshOnWindowFocus.html)
  100. ```ts
  101. const { data, error, run } = useRequest(getUserInfo, {
  102. refreshOnWindowFocus: true,
  103. refocusTimespan: 1000, // 请求间隔时间
  104. });
  105. ```
  106. ![vue-request](https://z3.ax1x.com/2021/09/10/hXAs8s.gif)
  107. ### 2.轮询数据
  108. 有些时候,你要确保多个设备间数据的同步更新。这时候可以用我们提供的 `pollingInterval` 来定期重新请求接口,这样就可以保证多设备间的数据一致性。当用户进行修改数据时,两个窗口将会实时同步更新。[点击这里直达文档](https://www.attojs.com/guide/documentation/polling.htm)
  109. ```ts
  110. const { data, error, run } = useRequest(getUserInfo, {
  111. pollingInterval: 1000, // 请求间隔时间
  112. });
  113. ```
  114. ![vue-request](https://z3.ax1x.com/2021/09/10/hXAy2n.gif)
  115. ## TODO 列表
  116. 如果你有很酷的想法,欢迎提交 issue 以便我们讨论
  117. - [ ] 支持 Vue 2
  118. - [x] 文档
  119. - [x] 分页
  120. - [x] 加载更多
  121. ## 致谢
  122. 感谢他们为我们提供了灵感
  123. - [vercel/swr](https://github.com/vercel/swr)
  124. - [alibaba/hooks](https://ahooks.js.org/hooks/async#userequest)
  125. ## License
  126. [MIT License](https://github.com/AttoJS/vue-request/blob/master/LICENSE) © 2020-present [AttoJS](https://github.com/AttoJS)