跳转到内容

createRequest

基于 Vue Composition API 封装的请求 Hook 工厂函数,支持自动状态管理、防抖/节流、轮询、缓存、数据格式化等特性,适用于绝大多数异步数据请求场景。

首先调用 createRequest 获取一个请求工厂函数,再调用该工厂函数发起请求。

特性

  • 响应式数据
  • 自动请求/手动请求
  • 节流、防抖请求
  • 请求错误自动重试
  • 轮询请求
  • 缓存 & SWR
  • 延迟/持续 loading
  • 聚焦页面时自动重新请求
  • 自定义插件

类型声明

typescript
function createRequest<TDataKey extends string = string>(
  config?: CreateRequestConfig<TDataKey>
)

CreateRequestConfig

typescript
interface CreateRequestConfig<TDataKey extends string = string> {
  /**
   * 数据字段路径,支持点号嵌套
   * TypeScript 会自动推导 data.value 的类型为 Get<TData, TDataKey>
   *
   * @example
   * dataKey: 'data'           // 提取 res.data
   * dataKey: 'result.data'    // 提取 res.result.data
   */
  dataKey?: TDataKey

  options?: RequestOptions

  plugins?: RequestPluginImplement[]
}

返回的工厂函数

createRequest 返回一个 useApi 工厂函数:

typescript
function useApi<
  TData = any,
  TParams extends any[] = any[],
  TSerialized = TData,
  TFormatData = TSerialized,
>(
  service: RequestServiceFn<TData, TParams>,
  options?: RequestOptions<TData, TParams, TSerialized, TFormatData>,
  plugins?: RequestPluginImplement<TData, TParams, TSerialized, TFormatData>[]
): RequestResult<TData, TParams, TSerialized, TFormatData>;

使用示例

typescript
import { createRequest } from 'norm-fetch/vue-rex'

const useApi = createRequest()

const { data, loading, run } = useApi(
  (params) => fetch('/api/user', params),
  { manual: true }
)

相关类型

RequestServiceFn

RequestState

RequestMethod

RequestResult

RequestOptions

RequestContext

RequestPluginHooks

RequestPluginImplement

泛型

名称默认值继承可选描述
TDataany数据类型
TParamsany[]any[]函数入参类型
TSerializedTData序列化后的数据类型
TFormatDataTSerialized格式化数据后的类型

入参(工厂函数)

名称类型默认值可选描述
serviceRequestServiceFn<TData, TParams>-异步函数
optionsRequestOptions<TData, TParams, TSerialized, TFormatData>-配置对象
pluginsRequestPluginImplement<TData, TParams, TSerialized, TFormatData>[]-插件数组

返回值

RequestResult<TData, TParams, TSerialized, TFormatData>