|
1 | 1 | # 网络请求 |
2 | | -简介 |
3 | | -对于中后台应用来说,很大一部分工作就在于请求后端的 CRUD 的接口,为进一步降低用户对请求层的感知,我们移除了默认生成的 utils/request.ts 文件,改成通过配置化的方式暴露给开发者做请求的配置和增强处理;同时通过业务总结出一套标准的接口结构规范,并提供统一的接口解析、错误处理的能力;后续将持续完善可配置项、提供垂直场景如列表、登录失效等解决方案。 |
| 2 | + |
| 3 | +对于中后台应用来说,很大一部分工作就在于请求后端的 CRUD 的接口,为进一步降低用户对请求层的感知,我们集成了接口请求方案。同时通过业务总结出一套标准的接口结构规范,并提供统一的接口解析、错误处理的能力。 |
| 4 | + |
| 5 | +## @kkt/request |
| 6 | + |
| 7 | +kkt内置请求方案。配置 `queryClient`开启。 `@kkt/request` 内置了 `react-query`(和 [`@tanstack/react-query`](https://npmjs.com/@tanstack/react-query)<!--rehype:target=__blank--> 是同一个)请求方案。更多 API 方法请查看 [react-query 官方文档](https://tanstack.com/query/latest)。 |
| 8 | + |
| 9 | +**`kktp`配置文件** |
| 10 | + |
| 11 | +```ts |
| 12 | +// .kktprc.ts |
| 13 | +export default { |
| 14 | + queryClient: true |
| 15 | +} |
| 16 | +``` |
| 17 | + |
| 18 | +```js |
| 19 | +import { useReactQuery, useReactMutation, queryClient, fetchFn } from '@kkt/request'; |
| 20 | +// OR |
| 21 | +import { useReactQuery, useReactMutation, queryClient, fetchFn } from '@kkt/pro'; |
| 22 | +``` |
| 23 | + |
| 24 | +**useReactQuery** |
| 25 | + |
| 26 | +主要用于**默认**触发请求数据,默认 `GET` 请求,变更使用 `method="POST"` 参数配置 |
| 27 | + |
| 28 | +```jsx |
| 29 | +useReactQuery({ |
| 30 | + queryKey: ['user', userId], |
| 31 | + url: `/api/user/list?id=${userId}` |
| 32 | +}); |
| 33 | +``` |
| 34 | +<!--rehype:style=background:#00de2247;border: 0;--> |
| 35 | + |
| 36 | +👆👆👆👆 上面是**推荐**使用 👆👆👆👆👆 |
| 37 | + |
| 38 | +```jsx |
| 39 | +import { fetchFn, useReactQuery } from '@kkt/request'; |
| 40 | + |
| 41 | +useReactQuery({ queryKey: ['user'], url: '/api/user/list' }); |
| 42 | +useReactQuery({ queryKey: ['user'], url: '/api/user/list', method: 'POST' }); |
| 43 | +useReactQuery({ queryKey: ['user', userId], queryFn: () => fetchFn(`/api/user/list?id=${userId}`) }); |
| 44 | +useReactQuery({ |
| 45 | + queryKey: ['user', userId], |
| 46 | + queryFn: async () => { |
| 47 | + return fetchFn(`/api/user/list?id=${userId}`); |
| 48 | + }, |
| 49 | +}); |
| 50 | +useReactQuery({ |
| 51 | + queryKey: ['user', userId], |
| 52 | + queryFn: ({ queryKey }) => fetchFn(`/api/user/list?id=${queryKey[1]}`);, |
| 53 | +}); |
| 54 | +useReactQuery({ |
| 55 | + queryKey: ['user'], |
| 56 | + url: '/api/user/list', |
| 57 | + initialData: [....], |
| 58 | +}); |
| 59 | + |
| 60 | +const { isInitialLoading, isError, data, error, refetch, isFetching } = useQuery(...) |
| 61 | +``` |
| 62 | + |
| 63 | +示例 |
| 64 | + |
| 65 | +```javascript |
| 66 | +import { useReactQuery } from '@kkt/request'; |
| 67 | + |
| 68 | +export default function HomePage() { |
| 69 | + const { isLoading, isError, data } = useReactQuery({ |
| 70 | + url: `/api/user/list`, |
| 71 | + queryKey: ['user-list'], |
| 72 | + }); |
| 73 | + |
| 74 | + return ( |
| 75 | + <div> |
| 76 | + <p className="title">ANEM x react-query</p> |
| 77 | + {isError && <p>请求 API 错误 ...</p>} |
| 78 | + {isLoading && <p>Loading ...</p>} |
| 79 | + {data && <p>ANEM 现在有 {data.stargazers_count} 颗星!</p>} |
| 80 | + </div> |
| 81 | + ); |
| 82 | +} |
| 83 | +``` |
| 84 | + |
| 85 | +更多参数及实例才考[@kkt/request](https://kktjs.github.io/kkt-pro/#/doc/request) |
| 86 | + |
4 | 87 | ## request |
5 | 88 |
|
6 | | -系统的请求基于axios进行了二次封装,参见[axios](https://axios-http.com/) |
| 89 | +`@uiw-admin/utils` 内置`request`方法。系统的请求基于axios进行了二次封装,参见[axios](https://axios-http.com/) |
7 | 90 |
|
8 | | -## 方法 |
| 91 | +```js |
| 92 | +import { request } from "@uiw-admin/utils" |
| 93 | +``` |
| 94 | + |
| 95 | +**方法** |
9 | 96 | 基于restful规范,提供了2个方法: |
10 | 97 | - get 获取服务端数据,参数拼接在url上,以 query string 方式发送给后端 |
11 | 98 | - post 新增数据,参数以body形式发送给后端 |
12 | 99 |
|
13 | 100 |
|
14 | | -## 参数 |
| 101 | +**参数** |
15 | 102 |
|
16 | 103 | | 参数 | 说明 | 类型 | 默认值 | |
17 | 104 | | :------ | :------- | :------------- | :----- | |
18 | 105 | | url | 请求地址 | string | - | |
19 | 106 | | options | 请求配置,即axios的配置, | Options | - | |
20 | 107 |
|
21 | | -### Options |
| 108 | +**Options** |
22 | 109 | | 参数 | 说明 | 类型 | 默认值 | |
23 | 110 | | :------ | :------- | :------------- | :----- | |
24 | 111 | | body | 请求传递给后端的参数 | any | - | |
25 | 112 | | requestType | 数据格式 | 'form' 或 'json' 或 'urlencoded' | - | |
26 | 113 |
|
27 | | -## 调用方式 |
28 | | -### ✨配和swr调用 |
| 114 | +**调用方式** |
| 115 | + |
| 116 | +**✨配和swr调用** |
29 | 117 | > 如果已全局配置过swr,可不用传入request |
30 | 118 |
|
31 | 119 | ```tsx |
@@ -55,7 +143,8 @@ export default const Index = () => { |
55 | 143 | } |
56 | 144 |
|
57 | 145 | ``` |
58 | | -### 在rematch中使用 |
| 146 | +**在rematch中使用** |
| 147 | + |
59 | 148 | > 在servers/index.js中 |
60 | 149 | ```ts |
61 | 150 | import { request } from "@uiw-admin/utils" |
|
0 commit comments