rxtutils 1.1.4-beta.9 → 1.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +117 -49
- package/cjs/_utils/defaultEquals.cjs +4 -19
- package/cjs/cache/index.cjs +130 -163
- package/cjs/cache/indexDB.cjs +86 -99
- package/cjs/downloadBlob.cjs +14 -0
- package/cjs/hooks/index.cjs +3 -6
- package/cjs/hooks/useCombineControlValue.cjs +33 -41
- package/cjs/index.cjs +16 -17
- package/cjs/request/defaultHandlers.cjs +5 -27
- package/cjs/request/error.cjs +18 -30
- package/cjs/request/index.cjs +194 -174
- package/cjs/store/createGetter/index.cjs +26 -40
- package/cjs/store/createStateStore/index.cjs +47 -90
- package/cjs/store/index.cjs +4 -7
- package/cjs/validator/decorators.cjs +71 -228
- package/cjs/validator/index.cjs +4 -7
- package/cjs/validator/validator.cjs +101 -177
- package/es/_utils/defaultEquals.mjs +4 -17
- package/es/cache/index.d.ts +9 -13
- package/es/cache/index.mjs +132 -160
- package/es/cache/indexDB.d.ts +1 -3
- package/es/cache/indexDB.mjs +87 -98
- package/es/downloadBlob.d.ts +8 -0
- package/es/downloadBlob.mjs +14 -0
- package/es/hooks/index.d.ts +1 -1
- package/es/hooks/index.mjs +4 -1
- package/es/hooks/useCombineControlValue.d.ts +5 -8
- package/es/hooks/useCombineControlValue.mjs +34 -40
- package/es/index.d.ts +28 -8
- package/es/index.mjs +29 -7
- package/es/request/defaultHandlers.d.ts +24 -0
- package/es/request/defaultHandlers.mjs +8 -26
- package/es/request/error.d.ts +3 -6
- package/es/request/error.mjs +18 -28
- package/es/request/index.d.ts +32 -20
- package/es/request/index.mjs +194 -172
- package/es/store/createGetter/index.d.ts +6 -10
- package/es/store/createGetter/index.mjs +28 -39
- package/es/store/createStateStore/index.d.ts +9 -9
- package/es/store/createStateStore/index.mjs +49 -87
- package/es/store/index.d.ts +4 -2
- package/es/store/index.mjs +7 -2
- package/es/validator/decorators.d.ts +12 -21
- package/es/validator/decorators.mjs +81 -226
- package/es/validator/index.d.ts +2 -2
- package/es/validator/index.mjs +16 -2
- package/es/validator/validator.d.ts +5 -6
- package/es/validator/validator.mjs +102 -176
- package/package.json +85 -15
- package/cjs/_utils/deepAssign.cjs +0 -25
- package/cjs/cache/index.d.ts +0 -141
- package/cjs/cache/indexDB.d.ts +0 -52
- package/cjs/hooks/index.d.ts +0 -1
- package/cjs/hooks/useCombineControlValue.d.ts +0 -21
- package/cjs/index.d.ts +0 -8
- package/cjs/request/error.d.ts +0 -31
- package/cjs/request/index.d.ts +0 -147
- package/cjs/store/createGetter/index.d.ts +0 -30
- package/cjs/store/createStateStore/index.d.ts +0 -42
- package/cjs/store/index.d.ts +0 -2
- package/cjs/validator/decorators.d.ts +0 -159
- package/cjs/validator/index.d.ts +0 -2
- package/cjs/validator/validator.d.ts +0 -84
- package/es/_utils/deepAssign.mjs +0 -23
package/es/request/index.mjs
CHANGED
|
@@ -1,176 +1,198 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import RequestError from './error.mjs';
|
|
8
|
-
import { deepAssign } from '../_utils/deepAssign.mjs';
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* 创建基础请求实例
|
|
12
|
-
* @param baseOptions 基础配置选项
|
|
13
|
-
* @returns 请求创建函数
|
|
14
|
-
*/
|
|
1
|
+
import axios from "axios";
|
|
2
|
+
import at from "lodash-es/at";
|
|
3
|
+
import { _defaultErrorCodeHandler, _defaultHttpErrorCodeHandler, _defaultOtherErrorCodeHandler } from "./defaultHandlers.mjs";
|
|
4
|
+
import defaultEquals from "../_utils/defaultEquals.mjs";
|
|
5
|
+
import Cache from "../cache/index.mjs";
|
|
6
|
+
import RequestError from "./error.mjs";
|
|
15
7
|
function createBaseRequest(baseOptions) {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
8
|
+
const { baseURL } = Object(baseOptions);
|
|
9
|
+
const instance = axios.create({
|
|
10
|
+
baseURL
|
|
11
|
+
});
|
|
12
|
+
return function createRequest(requestOptions, createOptions) {
|
|
13
|
+
const { method, url } = { ...requestOptions };
|
|
14
|
+
const {
|
|
15
|
+
baseURL: baseURL2,
|
|
16
|
+
cacheDataKey = `${method}:${baseURL2}${url}`,
|
|
17
|
+
cacheDataInStorage,
|
|
18
|
+
cacheKeyEquals = defaultEquals,
|
|
19
|
+
cacheTime,
|
|
20
|
+
indexDBName = "__apiCacheDatabase__"
|
|
21
|
+
} = {
|
|
22
|
+
...baseOptions,
|
|
23
|
+
...createOptions
|
|
24
|
+
};
|
|
25
|
+
const cache = new Cache(
|
|
26
|
+
cacheDataInStorage,
|
|
27
|
+
cacheDataKey,
|
|
28
|
+
cacheTime,
|
|
29
|
+
indexDBName,
|
|
30
|
+
cacheKeyEquals
|
|
31
|
+
);
|
|
32
|
+
async function request(requestParam, options) {
|
|
33
|
+
const mergedOptions = {
|
|
34
|
+
...baseOptions,
|
|
35
|
+
...createOptions,
|
|
36
|
+
...options
|
|
37
|
+
};
|
|
38
|
+
let {
|
|
39
|
+
requestMiddlewares = [],
|
|
40
|
+
axiosOptions: finalAxiosOptions = {},
|
|
41
|
+
requestParamsOrDataTransfer,
|
|
42
|
+
responseTransfer
|
|
43
|
+
} = mergedOptions;
|
|
44
|
+
let finalRequestOptions = { ...requestOptions, ...requestParam };
|
|
45
|
+
for (const middleware of requestMiddlewares) {
|
|
46
|
+
const {
|
|
47
|
+
axiosOptions: nextAxiosOptions = finalAxiosOptions,
|
|
48
|
+
requestOptions: nextRequestOptions = finalRequestOptions
|
|
49
|
+
} = await middleware(
|
|
50
|
+
{ ...mergedOptions, axiosOptions: finalAxiosOptions },
|
|
51
|
+
finalRequestOptions
|
|
52
|
+
);
|
|
53
|
+
finalAxiosOptions = nextAxiosOptions;
|
|
54
|
+
finalRequestOptions = nextRequestOptions;
|
|
55
|
+
}
|
|
56
|
+
const { method: method2, url: url2, data = {}, params = {} } = finalRequestOptions;
|
|
57
|
+
let requestDataOrParams = params;
|
|
58
|
+
if (method2.toLowerCase() === "post") {
|
|
59
|
+
requestDataOrParams = data;
|
|
60
|
+
}
|
|
61
|
+
const { defaultMessageShower = console.error } = {
|
|
62
|
+
...baseOptions,
|
|
63
|
+
...createOptions,
|
|
64
|
+
...options
|
|
65
|
+
};
|
|
66
|
+
const {
|
|
67
|
+
enableCache = false,
|
|
68
|
+
cacheData = false,
|
|
69
|
+
defaultErrorCodeHandler = _defaultErrorCodeHandler.bind(null, defaultMessageShower),
|
|
70
|
+
defaultHttpErrorCodeHandler = _defaultHttpErrorCodeHandler.bind(null, defaultMessageShower),
|
|
71
|
+
otherErrorHandler = _defaultOtherErrorCodeHandler.bind(null, defaultMessageShower),
|
|
72
|
+
errorCodePath = "code",
|
|
73
|
+
cacheTime: cacheTime2 = 60,
|
|
74
|
+
errorCodeMap = {},
|
|
75
|
+
successCodes = ["0", "200"],
|
|
76
|
+
httpErrorCodeMap = {},
|
|
77
|
+
// axiosOptions = {},
|
|
78
|
+
throwError = true,
|
|
79
|
+
retryTimes = 0
|
|
80
|
+
} = { ...baseOptions, ...createOptions, ...options };
|
|
81
|
+
if (enableCache) {
|
|
82
|
+
const cacheItem = cache.getCache(requestDataOrParams);
|
|
83
|
+
if (cacheItem) {
|
|
84
|
+
return Promise.resolve(cacheItem);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
function retry() {
|
|
88
|
+
if (retryTimes > 0) {
|
|
89
|
+
return request(requestParam, { ...options, retryTimes: retryTimes - 1 });
|
|
90
|
+
}
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
return instance.request({
|
|
94
|
+
method: method2,
|
|
95
|
+
url: url2,
|
|
96
|
+
data: requestParamsOrDataTransfer ? requestParamsOrDataTransfer(data) : data,
|
|
97
|
+
params: requestParamsOrDataTransfer ? requestParamsOrDataTransfer(params) : params,
|
|
98
|
+
...finalAxiosOptions
|
|
99
|
+
}).then(
|
|
100
|
+
async (res) => {
|
|
101
|
+
const errorCode = String(at(res.data, errorCodePath));
|
|
102
|
+
let finalData = responseTransfer ? responseTransfer(res.data) : res.data;
|
|
103
|
+
if (successCodes.includes(errorCode)) {
|
|
104
|
+
if (cacheData) {
|
|
105
|
+
cache.setCache(requestDataOrParams, finalData, { cacheTime: cacheTime2 });
|
|
106
|
+
}
|
|
107
|
+
return finalData;
|
|
108
|
+
}
|
|
109
|
+
const { [errorCode]: customHandler = defaultErrorCodeHandler } = errorCodeMap;
|
|
110
|
+
const err = new RequestError("服务端错误", "server", res);
|
|
111
|
+
if (typeof customHandler === "string") {
|
|
112
|
+
defaultMessageShower(customHandler);
|
|
113
|
+
const retryTask = retry();
|
|
114
|
+
if (retryTask) return retryTask;
|
|
115
|
+
} else {
|
|
116
|
+
const { replaceResData = res.data, throwError: handlerThrowError = "default" } = Object(
|
|
117
|
+
await customHandler(errorCode, res.data, res, {
|
|
118
|
+
...requestOptions,
|
|
119
|
+
...requestParam
|
|
120
|
+
})
|
|
121
|
+
);
|
|
122
|
+
const retryTask = retry();
|
|
123
|
+
if (retryTask) return retryTask;
|
|
124
|
+
res.data = replaceResData;
|
|
125
|
+
switch (handlerThrowError) {
|
|
126
|
+
case true:
|
|
127
|
+
throw err;
|
|
128
|
+
case false:
|
|
129
|
+
return res.data;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
if (throwError) {
|
|
133
|
+
throw err;
|
|
134
|
+
}
|
|
135
|
+
return res.data;
|
|
136
|
+
},
|
|
137
|
+
async (error) => {
|
|
138
|
+
if (error.response) {
|
|
139
|
+
let resData = error;
|
|
140
|
+
const { [error.response.status]: customHandler = defaultHttpErrorCodeHandler } = httpErrorCodeMap;
|
|
141
|
+
const err = new RequestError("服务端错误", "http", error);
|
|
142
|
+
if (typeof customHandler === "string") {
|
|
143
|
+
defaultMessageShower(customHandler);
|
|
144
|
+
const retryTask = retry();
|
|
145
|
+
if (retryTask) return retryTask;
|
|
146
|
+
} else {
|
|
147
|
+
const { replaceResData = error, throwError: handlerThrowError = "default" } = Object(
|
|
148
|
+
await customHandler(error.response.status, error, {
|
|
149
|
+
...requestOptions,
|
|
150
|
+
...requestParam
|
|
151
|
+
})
|
|
152
|
+
);
|
|
153
|
+
const retryTask = retry();
|
|
154
|
+
if (retryTask) return retryTask;
|
|
155
|
+
resData = replaceResData;
|
|
156
|
+
switch (handlerThrowError) {
|
|
157
|
+
case true:
|
|
158
|
+
throw err;
|
|
159
|
+
case false:
|
|
160
|
+
return resData;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
if (throwError) {
|
|
164
|
+
throw err;
|
|
165
|
+
}
|
|
166
|
+
return resData;
|
|
167
|
+
} else {
|
|
168
|
+
let resData = error;
|
|
169
|
+
const err = new RequestError("服务端错误", "http", error);
|
|
170
|
+
err.type = "http";
|
|
171
|
+
err.data = error;
|
|
172
|
+
const { replaceResData = error, throwError: handlerThrowError = "default" } = Object(await otherErrorHandler(error));
|
|
173
|
+
const retryTask = retry();
|
|
174
|
+
if (retryTask) return retryTask;
|
|
175
|
+
resData = replaceResData;
|
|
176
|
+
switch (handlerThrowError) {
|
|
177
|
+
case true:
|
|
178
|
+
throw err;
|
|
179
|
+
case false:
|
|
180
|
+
return resData;
|
|
181
|
+
}
|
|
182
|
+
if (throwError) {
|
|
183
|
+
throw err;
|
|
184
|
+
}
|
|
185
|
+
return resData;
|
|
186
|
+
}
|
|
168
187
|
}
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
188
|
+
);
|
|
189
|
+
}
|
|
190
|
+
request.clearCache = () => {
|
|
191
|
+
cache.clear();
|
|
173
192
|
};
|
|
193
|
+
return request;
|
|
194
|
+
};
|
|
174
195
|
}
|
|
175
|
-
|
|
176
|
-
|
|
196
|
+
export {
|
|
197
|
+
createBaseRequest as default
|
|
198
|
+
};
|
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import createStateStore from '../createStateStore
|
|
2
|
-
|
|
3
|
-
type StoreGetter<S = any> = {
|
|
1
|
+
import { default as createStateStore } from '../createStateStore';
|
|
2
|
+
export type StoreGetter<S = any> = {
|
|
4
3
|
[K in string]: (store: S) => any;
|
|
5
4
|
};
|
|
6
|
-
type GetterNameMap<G extends StoreGetter<any>> = {
|
|
5
|
+
export type GetterNameMap<G extends StoreGetter<any>> = {
|
|
7
6
|
[K in keyof G]: string;
|
|
8
7
|
};
|
|
9
|
-
type ReducedData<G extends StoreGetter<any>, M extends GetterNameMap<G>> = {
|
|
8
|
+
export type ReducedData<G extends StoreGetter<any>, M extends GetterNameMap<G>> = {
|
|
10
9
|
[K in keyof M as M[K]]: G[K extends keyof G ? K : never] extends (store: any) => infer R ? R : never;
|
|
11
10
|
};
|
|
12
11
|
/**
|
|
@@ -16,7 +15,7 @@ type ReducedData<G extends StoreGetter<any>, M extends GetterNameMap<G>> = {
|
|
|
16
15
|
* @param getterNameMaps 将 getter 函数和 getter 名称一一映射
|
|
17
16
|
* @returns getter object
|
|
18
17
|
*/
|
|
19
|
-
declare const createStoreGetter: <S, G extends StoreGetter<S>, M extends GetterNameMap<G>>(store: ReturnType<typeof createStateStore<S>>, getters: G, getterNameMaps: M) => ReducedData<G, M>;
|
|
18
|
+
export declare const createStoreGetter: <S, G extends StoreGetter<S>, M extends GetterNameMap<G>>(store: ReturnType<typeof createStateStore<S>>, getters: G, getterNameMaps: M) => ReducedData<G, M>;
|
|
20
19
|
/**
|
|
21
20
|
*
|
|
22
21
|
* @param store store实例
|
|
@@ -24,7 +23,4 @@ declare const createStoreGetter: <S, G extends StoreGetter<S>, M extends GetterN
|
|
|
24
23
|
* @param getterNameMaps 将 getter 函数和 getter 名称一一映射
|
|
25
24
|
* @returns getter memo hook
|
|
26
25
|
*/
|
|
27
|
-
declare const createStoreGetterMemo: <S, G extends StoreGetter<S>, M extends GetterNameMap<G>>(store: ReturnType<typeof createStateStore<S>>, getters: G, getterNameMaps: M) => () => ReducedData<G, M>;
|
|
28
|
-
|
|
29
|
-
export { createStoreGetter, createStoreGetterMemo };
|
|
30
|
-
export type { GetterNameMap, ReducedData, StoreGetter };
|
|
26
|
+
export declare const createStoreGetterMemo: <S, G extends StoreGetter<S>, M extends GetterNameMap<G>>(store: ReturnType<typeof createStateStore<S>>, getters: G, getterNameMaps: M) => () => ReducedData<G, M>;
|
|
@@ -1,42 +1,31 @@
|
|
|
1
|
-
import { useMemo } from
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
* @param getterNameMaps 将 getter 函数和 getter 名称一一映射
|
|
8
|
-
* @returns getter object
|
|
9
|
-
*/
|
|
10
|
-
var createStoreGetter = function (store, getters, getterNameMaps) {
|
|
11
|
-
var gettersObj = {};
|
|
12
|
-
Object.keys(getters).forEach(function (key) {
|
|
13
|
-
Object.defineProperty(gettersObj, getterNameMaps[key], {
|
|
14
|
-
get: function () { return getters[key](store.get()); }
|
|
15
|
-
});
|
|
1
|
+
import { useMemo } from "react";
|
|
2
|
+
const createStoreGetter = (store, getters, getterNameMaps) => {
|
|
3
|
+
const gettersObj = {};
|
|
4
|
+
Object.keys(getters).forEach((key) => {
|
|
5
|
+
Object.defineProperty(gettersObj, getterNameMaps[key], {
|
|
6
|
+
get: () => getters[key](store.get())
|
|
16
7
|
});
|
|
17
|
-
|
|
8
|
+
});
|
|
9
|
+
return gettersObj;
|
|
18
10
|
};
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
};
|
|
11
|
+
const createStoreGetterMemo = (store, getters, getterNameMaps) => {
|
|
12
|
+
return () => {
|
|
13
|
+
const [storeData] = store.use();
|
|
14
|
+
const reducedData = useMemo(() => {
|
|
15
|
+
return Object.keys(getters).reduce(
|
|
16
|
+
(acc, key) => {
|
|
17
|
+
const mappedKey = getterNameMaps[key];
|
|
18
|
+
const getterValue = getters[key](storeData);
|
|
19
|
+
acc[mappedKey] = getterValue;
|
|
20
|
+
return acc;
|
|
21
|
+
},
|
|
22
|
+
{}
|
|
23
|
+
);
|
|
24
|
+
}, [storeData]);
|
|
25
|
+
return reducedData;
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
export {
|
|
29
|
+
createStoreGetter,
|
|
30
|
+
createStoreGetterMemo
|
|
40
31
|
};
|
|
41
|
-
|
|
42
|
-
export { createStoreGetter, createStoreGetterMemo };
|
|
@@ -2,27 +2,30 @@
|
|
|
2
2
|
* 状态初始化设置器类型
|
|
3
3
|
* 用于延迟初始化状态的函数类型
|
|
4
4
|
*/
|
|
5
|
-
type IHookStateInitialSetter<S> = () => S;
|
|
5
|
+
export type IHookStateInitialSetter<S> = () => S;
|
|
6
6
|
/**
|
|
7
7
|
* 状态初始化动作类型
|
|
8
8
|
* 可以是直接的状态值或初始化设置器
|
|
9
9
|
*/
|
|
10
|
-
type IHookStateInitAction<S> = S | IHookStateInitialSetter<S>;
|
|
10
|
+
export type IHookStateInitAction<S> = S | IHookStateInitialSetter<S>;
|
|
11
11
|
/**
|
|
12
12
|
* 状态设置器类型
|
|
13
13
|
* 可以是接收前一个状态的函数或无参数的函数
|
|
14
14
|
*/
|
|
15
|
-
type IHookStateSetter<S> = ((prevState: S) => S) | (() => S);
|
|
15
|
+
export type IHookStateSetter<S> = ((prevState: S) => S) | (() => S);
|
|
16
16
|
/**
|
|
17
17
|
* 状态设置动作类型
|
|
18
18
|
* 可以是直接的状态值或状态设置器
|
|
19
19
|
*/
|
|
20
|
-
type IHookStateSetAction<S> = S | IHookStateSetter<S>;
|
|
20
|
+
export type IHookStateSetAction<S> = S | IHookStateSetter<S>;
|
|
21
21
|
/**
|
|
22
22
|
* 可解析的状态类型
|
|
23
23
|
* 包含所有可能的状态值或状态设置函数
|
|
24
24
|
*/
|
|
25
|
-
type IHookStateResolvable<S> = S | IHookStateInitialSetter<S> | IHookStateSetter<S>;
|
|
25
|
+
export type IHookStateResolvable<S> = S | IHookStateInitialSetter<S> | IHookStateSetter<S>;
|
|
26
|
+
export declare function resolveHookState<S>(nextState: IHookStateInitAction<S>): S;
|
|
27
|
+
export declare function resolveHookState<S, C extends S>(nextState: IHookStateSetAction<S>, currentState: C): S;
|
|
28
|
+
export declare function resolveHookState<S, C extends S>(nextState: IHookStateResolvable<S>, currentState: C): S;
|
|
26
29
|
/**
|
|
27
30
|
* 创建状态存储
|
|
28
31
|
* 提供一个简单的状态管理解决方案,支持组件间状态共享
|
|
@@ -31,12 +34,9 @@ type IHookStateResolvable<S> = S | IHookStateInitialSetter<S> | IHookStateSetter
|
|
|
31
34
|
* @param initialState 初始状态值或初始化函数
|
|
32
35
|
* @returns 包含状态操作方法的对象
|
|
33
36
|
*/
|
|
34
|
-
|
|
37
|
+
export default function createStateStore<S>(initialState?: S): {
|
|
35
38
|
use: () => [S, (state: IHookStateSetAction<S>) => void];
|
|
36
39
|
get: () => S;
|
|
37
40
|
set: (state: IHookStateSetAction<S>) => void;
|
|
38
41
|
watch: (callback: (state: S) => S | void) => () => void;
|
|
39
42
|
};
|
|
40
|
-
|
|
41
|
-
export { createStateStore as default };
|
|
42
|
-
export type { IHookStateInitAction, IHookStateInitialSetter, IHookStateResolvable, IHookStateSetAction, IHookStateSetter };
|