Skip to content

Commit 2550180

Browse files
authored
type: support initialData (#204)
* type: support initialData * feat: initial data type
1 parent 3b72edd commit 2550180

File tree

9 files changed

+217
-79
lines changed

9 files changed

+217
-79
lines changed

packages/hooks/src/useRequest/Fetch.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ import {
55
UseRequestOptions,
66
UseRequestPluginReturn,
77
UseRequestService,
8-
UseRequestOptionsWithFormatResult
8+
UseRequestOptionsWithFormatResult,
9+
UseRequestOptionsWithInitialData,
910
} from './types'
1011

1112
export default class Fetch<TData, TParams extends unknown[] = any> {
@@ -24,7 +25,12 @@ export default class Fetch<TData, TParams extends unknown[] = any> {
2425

2526
constructor(
2627
public serviceRef: Ref<UseRequestService<TData, TParams>>,
27-
public options: Partial<UseRequestOptions<TData, TParams, any> & UseRequestOptionsWithFormatResult<TData, TParams, any, any>>,
28+
public options: Partial<
29+
UseRequestOptions<TData, TParams, any> &
30+
UseRequestOptionsWithFormatResult<TData, TParams, any, any>
31+
&
32+
UseRequestOptionsWithInitialData<TData, TParams, any>
33+
>,
2834
public setUpdateData: (
2935
currentState: unknown,
3036
key?: keyof UseRequestFetchState<TData, TParams>,

packages/hooks/src/useRequest/docs/basic/demo/demo.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
<template>
22
<div>name:{{ loading ? 'loading' : data }}</div>
3-
{{ data }}
43
</template>
54

65
<script lang="ts" setup>
@@ -16,5 +15,6 @@
1615
1716
const { data, loading } = useRequest(() => getUsername({ desc: 'good' }), {
1817
debugKey: 'demo',
18+
initialData:"000"
1919
})
2020
</script>

packages/hooks/src/useRequest/types.ts

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ export interface UseRequestPluginReturn<TData, TParams extends unknown[]> {
2121
params: TParams,
2222
) =>
2323
| ({
24-
stopNow?: boolean
25-
returnNow?: boolean
26-
} & Partial<UseRequestFetchState<TData, TParams>>)
24+
stopNow?: boolean
25+
returnNow?: boolean
26+
} & Partial<UseRequestFetchState<TData, TParams>>)
2727
| void
2828

2929
onRequest?: (
@@ -46,17 +46,15 @@ export type RequestHook<TData = any, TParams extends any[] = any[]> = (
4646
plugins: UseRequestPlugin<TData, TParams>[],
4747
) => useRequestResult<TData, TParams>
4848

49-
50-
5149
export type UseRequestMiddleware<TData, TParams extends any[]> = (
52-
useRequestNext: RequestHook<TData, TParams>
50+
useRequestNext: RequestHook<TData, TParams>,
5351
) => RequestHook<TData, TParams>
5452

5553
export type UseRequestBasicOptions<TData, TParams extends unknown[]> = {
5654
/**
5755
* Init data.
5856
*/
59-
initialData?: TData
57+
// initialData?: TData
6058

6159
/**
6260
* - The default is `false.` That is, the service is automatically executed during initialization.
@@ -250,20 +248,30 @@ export type UseRequestBasicOptions<TData, TParams extends unknown[]> = {
250248
rollbackOnError?: boolean | ((params: TParams) => boolean)
251249
}
252250

253-
export type UseRequestOptions<TData, TParams extends any[] = any[], TPlugin = any> = UseRequestBasicOptions<TData, TParams> &
254-
{
251+
export type UseRequestOptions<
252+
TData,
253+
TParams extends any[] = any[],
254+
TPlugin = any
255+
> = UseRequestBasicOptions<TData, TParams> & {
255256
pluginOptions?: TPlugin
256257
}
257258

258259
export type UseRequestOptionsWithFormatResult<
259260
TData,
260261
TParams extends any[] = any[],
261262
TPlugin = any,
262-
SR = any,
263+
SR = any
263264
> = UseRequestOptions<TData, TParams, TPlugin> & {
264-
formatResult: (res: SR) => TData;
265+
formatResult: (res: SR) => TData
265266
}
266267

268+
export type UseRequestOptionsWithInitialData<
269+
TData,
270+
TParams extends any[] = any[],
271+
TPlugin = any
272+
> = UseRequestOptions<TData, TParams, TPlugin> & {
273+
initialData: TData extends infer R ? R : TData
274+
}
267275

268276
export interface UseRequestPlugin<TData, TParams extends unknown[] = unknown[], TPlugin = any> {
269277
(

packages/hooks/src/useRequest/useRequest.ts

Lines changed: 80 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -10,48 +10,104 @@ import useThrottlePlugin from './plugins/useThrottlePlugin'
1010

1111
import useRequestImplement from './useRequestImplement'
1212

13-
import { UseRequestOptions, UseRequestOptionsWithFormatResult, UseRequestPlugin, useRequestResult, UseRequestService } from './types'
13+
import {
14+
UseRequestOptions,
15+
UseRequestOptionsWithFormatResult,
16+
UseRequestOptionsWithInitialData,
17+
UseRequestPlugin,
18+
useRequestResult,
19+
UseRequestService,
20+
} from './types'
1421
import { withArgs } from './utils/resolve-args'
1522

23+
export type PluginsMiddleOptionsType<
24+
PluginsOptions,
25+
TData,
26+
TParams extends unknown[] = unknown[]
27+
> = PluginsOptions extends (infer P)[]
28+
? P extends UseRequestPlugin<TData, TParams, infer R>
29+
? R
30+
: never
31+
: never
1632

17-
// formatResult
33+
// 同时存在 formatResult 和 initialData
1834
export function useRequest<
1935
TData,
2036
TParams extends unknown[] = unknown[],
2137
PluginsOptions extends UseRequestPlugin<TData, TParams>[] = UseRequestPlugin<TData, TParams>[],
22-
SR = any,
23-
>(service: UseRequestService<SR, TParams>, options: UseRequestOptionsWithFormatResult<TData, TParams, PluginsOptions extends (infer P)[]
24-
? P extends UseRequestPlugin<TData, TParams, infer R>
25-
? R
26-
: never
27-
: never, SR>, plugins?: PluginsOptions): useRequestResult<TData, TParams>
28-
38+
SR = any
39+
>(
40+
service: UseRequestService<SR, TParams>,
41+
options: UseRequestOptionsWithFormatResult<
42+
TData,
43+
TParams,
44+
PluginsMiddleOptionsType<PluginsOptions, TData, TParams>,
45+
SR
46+
> &
47+
UseRequestOptionsWithInitialData<SR, TParams, PluginsOptions>,
48+
plugins?: PluginsOptions,
49+
): useRequestResult<TData, TParams>
2950

30-
// 无 formatResults
51+
// 只有 formatResult
3152
export function useRequest<
3253
TData,
3354
TParams extends unknown[] = unknown[],
3455
PluginsOptions extends UseRequestPlugin<TData, TParams>[] = UseRequestPlugin<TData, TParams>[],
35-
>(service: UseRequestService<TData, TParams>, options?: UseRequestOptions<TData, TParams, PluginsOptions extends (infer P)[]
36-
? P extends UseRequestPlugin<TData, TParams, infer R>
37-
? R
38-
: never
39-
: never>, plugins?: PluginsOptions): useRequestResult<TData, TParams>
56+
SR = any
57+
>(
58+
service: UseRequestService<SR, TParams>,
59+
options: UseRequestOptionsWithFormatResult<
60+
TData,
61+
TParams,
62+
PluginsMiddleOptionsType<PluginsOptions, TData, TParams>,
63+
SR
64+
>,
65+
plugins?: PluginsOptions,
66+
): useRequestResult<TData, TParams>
4067

68+
// 只有 initialData
4169
export function useRequest<
4270
TData,
4371
TParams extends unknown[] = unknown[],
44-
PluginsOptions extends UseRequestPlugin<TData, TParams>[] = UseRequestPlugin<TData, TParams>[],
72+
PluginsOptions extends UseRequestPlugin<TData, TParams>[] = UseRequestPlugin<TData, TParams>[]
4573
>(
4674
service: UseRequestService<TData, TParams>,
47-
options?: UseRequestOptions<TData, TParams, PluginsOptions extends (infer P)[]
48-
? P extends UseRequestPlugin<TData, TParams, infer R>
49-
? R
50-
: never
51-
: never>,
75+
options: UseRequestOptionsWithInitialData<
76+
TData,
77+
TParams,
78+
PluginsMiddleOptionsType<PluginsOptions, TData, TParams>
79+
>,
5280
plugins?: PluginsOptions,
53-
) {
81+
): useRequestResult<TData, TParams>
5482

83+
// 无 formatResults 和 initialData
84+
export function useRequest<
85+
TData,
86+
TParams extends unknown[] = unknown[],
87+
PluginsOptions extends UseRequestPlugin<TData, TParams>[] = UseRequestPlugin<TData, TParams>[]
88+
>(
89+
service: UseRequestService<TData, TParams>,
90+
options?: UseRequestOptions<
91+
TData,
92+
TParams,
93+
PluginsMiddleOptionsType<PluginsOptions, TData, TParams>
94+
>,
95+
plugins?: PluginsOptions,
96+
): useRequestResult<TData, TParams>
97+
98+
export function useRequest<
99+
TData,
100+
TParams extends unknown[] = unknown[],
101+
PluginsOptions extends UseRequestPlugin<TData, TParams>[] = UseRequestPlugin<TData, TParams>[]
102+
>(
103+
service: UseRequestService<TData, TParams>,
104+
options?: UseRequestOptions<
105+
TData,
106+
TParams,
107+
PluginsMiddleOptionsType<PluginsOptions, TData, TParams>
108+
>,
109+
plugins?: PluginsOptions,
110+
) {
55111
const BuiltInPlugins = [
56112
process.env.NODE_ENV === 'development' ? useDevtoolsPlugin : null,
57113
useDebouncePlugin,
@@ -61,15 +117,13 @@ export function useRequest<
61117
useThrottlePlugin,
62118
useAutoRunPlugin,
63119
useCachePlugin,
64-
useRetryPlugin
120+
useRetryPlugin,
65121
]?.filter(Boolean)
66122

67123
return withArgs<TData, TParams>(useRequestImplement, options?.use)(service, options, [
68124
...(plugins || []),
69-
...BuiltInPlugins
125+
...BuiltInPlugins,
70126
] as UseRequestPlugin<TData, TParams>[])
71127
}
72128

73-
74-
75129
export default useRequest

packages/hooks/src/useRequest/useRequestImplement.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ function useRequestImplement<TData, TParams extends any[]>(
3535
const fetchOptions = {
3636
manual,
3737
ready,
38+
initialData,
3839
...rest,
3940
}
4041

packages/use-request/src/Fetch.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ import {
55
UseRequestOptions,
66
UseRequestPluginReturn,
77
UseRequestService,
8-
UseRequestOptionsWithFormatResult
8+
UseRequestOptionsWithFormatResult,
9+
UseRequestOptionsWithInitialData,
910
} from './types'
1011

1112
export default class Fetch<TData, TParams extends unknown[] = any> {
@@ -24,7 +25,12 @@ export default class Fetch<TData, TParams extends unknown[] = any> {
2425

2526
constructor(
2627
public serviceRef: Ref<UseRequestService<TData, TParams>>,
27-
public options: Partial<UseRequestOptions<TData, TParams, any> & UseRequestOptionsWithFormatResult<TData, TParams, any, any>>,
28+
public options: Partial<
29+
UseRequestOptions<TData, TParams, any> &
30+
UseRequestOptionsWithFormatResult<TData, TParams, any, any>
31+
&
32+
UseRequestOptionsWithInitialData<TData, TParams, any>
33+
>,
2834
public setUpdateData: (
2935
currentState: unknown,
3036
key?: keyof UseRequestFetchState<TData, TParams>,

packages/use-request/src/types.ts

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ export interface UseRequestPluginReturn<TData, TParams extends unknown[]> {
2121
params: TParams,
2222
) =>
2323
| ({
24-
stopNow?: boolean
25-
returnNow?: boolean
26-
} & Partial<UseRequestFetchState<TData, TParams>>)
24+
stopNow?: boolean
25+
returnNow?: boolean
26+
} & Partial<UseRequestFetchState<TData, TParams>>)
2727
| void
2828

2929
onRequest?: (
@@ -46,17 +46,15 @@ export type RequestHook<TData = any, TParams extends any[] = any[]> = (
4646
plugins: UseRequestPlugin<TData, TParams>[],
4747
) => useRequestResult<TData, TParams>
4848

49-
50-
5149
export type UseRequestMiddleware<TData, TParams extends any[]> = (
52-
useRequestNext: RequestHook<TData, TParams>
50+
useRequestNext: RequestHook<TData, TParams>,
5351
) => RequestHook<TData, TParams>
5452

5553
export type UseRequestBasicOptions<TData, TParams extends unknown[]> = {
5654
/**
5755
* Init data.
5856
*/
59-
initialData?: TData
57+
// initialData?: TData
6058

6159
/**
6260
* - The default is `false.` That is, the service is automatically executed during initialization.
@@ -250,20 +248,30 @@ export type UseRequestBasicOptions<TData, TParams extends unknown[]> = {
250248
rollbackOnError?: boolean | ((params: TParams) => boolean)
251249
}
252250

253-
export type UseRequestOptions<TData, TParams extends any[] = any[], TPlugin = any> = UseRequestBasicOptions<TData, TParams> &
254-
{
251+
export type UseRequestOptions<
252+
TData,
253+
TParams extends any[] = any[],
254+
TPlugin = any
255+
> = UseRequestBasicOptions<TData, TParams> & {
255256
pluginOptions?: TPlugin
256257
}
257258

258259
export type UseRequestOptionsWithFormatResult<
259260
TData,
260261
TParams extends any[] = any[],
261262
TPlugin = any,
262-
SR = any,
263+
SR = any
263264
> = UseRequestOptions<TData, TParams, TPlugin> & {
264-
formatResult: (res: SR) => TData;
265+
formatResult: (res: SR) => TData
265266
}
266267

268+
export type UseRequestOptionsWithInitialData<
269+
TData,
270+
TParams extends any[] = any[],
271+
TPlugin = any
272+
> = UseRequestOptions<TData, TParams, TPlugin> & {
273+
initialData: TData extends infer R ? R : TData
274+
}
267275

268276
export interface UseRequestPlugin<TData, TParams extends unknown[] = unknown[], TPlugin = any> {
269277
(

0 commit comments

Comments
 (0)