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/cjs/request/index.cjs
CHANGED
|
@@ -1,178 +1,198 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
var error = require('./error.cjs');
|
|
10
|
-
var deepAssign = require('../_utils/deepAssign.cjs');
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* 创建基础请求实例
|
|
14
|
-
* @param baseOptions 基础配置选项
|
|
15
|
-
* @returns 请求创建函数
|
|
16
|
-
*/
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
|
+
const axios = require("axios");
|
|
4
|
+
const at = require("lodash-es/at");
|
|
5
|
+
const defaultHandlers = require("./defaultHandlers.cjs");
|
|
6
|
+
const defaultEquals = require("../_utils/defaultEquals.cjs");
|
|
7
|
+
const cache_index = require("../cache/index.cjs");
|
|
8
|
+
const error = require("./error.cjs");
|
|
17
9
|
function createBaseRequest(baseOptions) {
|
|
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
|
-
|
|
168
|
-
|
|
169
|
-
|
|
10
|
+
const { baseURL } = Object(baseOptions);
|
|
11
|
+
const instance = axios.create({
|
|
12
|
+
baseURL
|
|
13
|
+
});
|
|
14
|
+
return function createRequest(requestOptions, createOptions) {
|
|
15
|
+
const { method, url } = { ...requestOptions };
|
|
16
|
+
const {
|
|
17
|
+
baseURL: baseURL2,
|
|
18
|
+
cacheDataKey = `${method}:${baseURL2}${url}`,
|
|
19
|
+
cacheDataInStorage,
|
|
20
|
+
cacheKeyEquals = defaultEquals.default,
|
|
21
|
+
cacheTime,
|
|
22
|
+
indexDBName = "__apiCacheDatabase__"
|
|
23
|
+
} = {
|
|
24
|
+
...baseOptions,
|
|
25
|
+
...createOptions
|
|
26
|
+
};
|
|
27
|
+
const cache = new cache_index.default(
|
|
28
|
+
cacheDataInStorage,
|
|
29
|
+
cacheDataKey,
|
|
30
|
+
cacheTime,
|
|
31
|
+
indexDBName,
|
|
32
|
+
cacheKeyEquals
|
|
33
|
+
);
|
|
34
|
+
async function request(requestParam, options) {
|
|
35
|
+
const mergedOptions = {
|
|
36
|
+
...baseOptions,
|
|
37
|
+
...createOptions,
|
|
38
|
+
...options
|
|
39
|
+
};
|
|
40
|
+
let {
|
|
41
|
+
requestMiddlewares = [],
|
|
42
|
+
axiosOptions: finalAxiosOptions = {},
|
|
43
|
+
requestParamsOrDataTransfer,
|
|
44
|
+
responseTransfer
|
|
45
|
+
} = mergedOptions;
|
|
46
|
+
let finalRequestOptions = { ...requestOptions, ...requestParam };
|
|
47
|
+
for (const middleware of requestMiddlewares) {
|
|
48
|
+
const {
|
|
49
|
+
axiosOptions: nextAxiosOptions = finalAxiosOptions,
|
|
50
|
+
requestOptions: nextRequestOptions = finalRequestOptions
|
|
51
|
+
} = await middleware(
|
|
52
|
+
{ ...mergedOptions, axiosOptions: finalAxiosOptions },
|
|
53
|
+
finalRequestOptions
|
|
54
|
+
);
|
|
55
|
+
finalAxiosOptions = nextAxiosOptions;
|
|
56
|
+
finalRequestOptions = nextRequestOptions;
|
|
57
|
+
}
|
|
58
|
+
const { method: method2, url: url2, data = {}, params = {} } = finalRequestOptions;
|
|
59
|
+
let requestDataOrParams = params;
|
|
60
|
+
if (method2.toLowerCase() === "post") {
|
|
61
|
+
requestDataOrParams = data;
|
|
62
|
+
}
|
|
63
|
+
const { defaultMessageShower = console.error } = {
|
|
64
|
+
...baseOptions,
|
|
65
|
+
...createOptions,
|
|
66
|
+
...options
|
|
67
|
+
};
|
|
68
|
+
const {
|
|
69
|
+
enableCache = false,
|
|
70
|
+
cacheData = false,
|
|
71
|
+
defaultErrorCodeHandler = defaultHandlers._defaultErrorCodeHandler.bind(null, defaultMessageShower),
|
|
72
|
+
defaultHttpErrorCodeHandler = defaultHandlers._defaultHttpErrorCodeHandler.bind(null, defaultMessageShower),
|
|
73
|
+
otherErrorHandler = defaultHandlers._defaultOtherErrorCodeHandler.bind(null, defaultMessageShower),
|
|
74
|
+
errorCodePath = "code",
|
|
75
|
+
cacheTime: cacheTime2 = 60,
|
|
76
|
+
errorCodeMap = {},
|
|
77
|
+
successCodes = ["0", "200"],
|
|
78
|
+
httpErrorCodeMap = {},
|
|
79
|
+
// axiosOptions = {},
|
|
80
|
+
throwError = true,
|
|
81
|
+
retryTimes = 0
|
|
82
|
+
} = { ...baseOptions, ...createOptions, ...options };
|
|
83
|
+
if (enableCache) {
|
|
84
|
+
const cacheItem = cache.getCache(requestDataOrParams);
|
|
85
|
+
if (cacheItem) {
|
|
86
|
+
return Promise.resolve(cacheItem);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
function retry() {
|
|
90
|
+
if (retryTimes > 0) {
|
|
91
|
+
return request(requestParam, { ...options, retryTimes: retryTimes - 1 });
|
|
92
|
+
}
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
return instance.request({
|
|
96
|
+
method: method2,
|
|
97
|
+
url: url2,
|
|
98
|
+
data: requestParamsOrDataTransfer ? requestParamsOrDataTransfer(data) : data,
|
|
99
|
+
params: requestParamsOrDataTransfer ? requestParamsOrDataTransfer(params) : params,
|
|
100
|
+
...finalAxiosOptions
|
|
101
|
+
}).then(
|
|
102
|
+
async (res) => {
|
|
103
|
+
const errorCode = String(at(res.data, errorCodePath));
|
|
104
|
+
let finalData = responseTransfer ? responseTransfer(res.data) : res.data;
|
|
105
|
+
if (successCodes.includes(errorCode)) {
|
|
106
|
+
if (cacheData) {
|
|
107
|
+
cache.setCache(requestDataOrParams, finalData, { cacheTime: cacheTime2 });
|
|
108
|
+
}
|
|
109
|
+
return finalData;
|
|
110
|
+
}
|
|
111
|
+
const { [errorCode]: customHandler = defaultErrorCodeHandler } = errorCodeMap;
|
|
112
|
+
const err = new error.default("服务端错误", "server", res);
|
|
113
|
+
if (typeof customHandler === "string") {
|
|
114
|
+
defaultMessageShower(customHandler);
|
|
115
|
+
const retryTask = retry();
|
|
116
|
+
if (retryTask) return retryTask;
|
|
117
|
+
} else {
|
|
118
|
+
const { replaceResData = res.data, throwError: handlerThrowError = "default" } = Object(
|
|
119
|
+
await customHandler(errorCode, res.data, res, {
|
|
120
|
+
...requestOptions,
|
|
121
|
+
...requestParam
|
|
122
|
+
})
|
|
123
|
+
);
|
|
124
|
+
const retryTask = retry();
|
|
125
|
+
if (retryTask) return retryTask;
|
|
126
|
+
res.data = replaceResData;
|
|
127
|
+
switch (handlerThrowError) {
|
|
128
|
+
case true:
|
|
129
|
+
throw err;
|
|
130
|
+
case false:
|
|
131
|
+
return res.data;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
if (throwError) {
|
|
135
|
+
throw err;
|
|
136
|
+
}
|
|
137
|
+
return res.data;
|
|
138
|
+
},
|
|
139
|
+
async (error$1) => {
|
|
140
|
+
if (error$1.response) {
|
|
141
|
+
let resData = error$1;
|
|
142
|
+
const { [error$1.response.status]: customHandler = defaultHttpErrorCodeHandler } = httpErrorCodeMap;
|
|
143
|
+
const err = new error.default("服务端错误", "http", error$1);
|
|
144
|
+
if (typeof customHandler === "string") {
|
|
145
|
+
defaultMessageShower(customHandler);
|
|
146
|
+
const retryTask = retry();
|
|
147
|
+
if (retryTask) return retryTask;
|
|
148
|
+
} else {
|
|
149
|
+
const { replaceResData = error$1, throwError: handlerThrowError = "default" } = Object(
|
|
150
|
+
await customHandler(error$1.response.status, error$1, {
|
|
151
|
+
...requestOptions,
|
|
152
|
+
...requestParam
|
|
153
|
+
})
|
|
154
|
+
);
|
|
155
|
+
const retryTask = retry();
|
|
156
|
+
if (retryTask) return retryTask;
|
|
157
|
+
resData = replaceResData;
|
|
158
|
+
switch (handlerThrowError) {
|
|
159
|
+
case true:
|
|
160
|
+
throw err;
|
|
161
|
+
case false:
|
|
162
|
+
return resData;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
if (throwError) {
|
|
166
|
+
throw err;
|
|
167
|
+
}
|
|
168
|
+
return resData;
|
|
169
|
+
} else {
|
|
170
|
+
let resData = error$1;
|
|
171
|
+
const err = new error.default("服务端错误", "http", error$1);
|
|
172
|
+
err.type = "http";
|
|
173
|
+
err.data = error$1;
|
|
174
|
+
const { replaceResData = error$1, throwError: handlerThrowError = "default" } = Object(await otherErrorHandler(error$1));
|
|
175
|
+
const retryTask = retry();
|
|
176
|
+
if (retryTask) return retryTask;
|
|
177
|
+
resData = replaceResData;
|
|
178
|
+
switch (handlerThrowError) {
|
|
179
|
+
case true:
|
|
180
|
+
throw err;
|
|
181
|
+
case false:
|
|
182
|
+
return resData;
|
|
183
|
+
}
|
|
184
|
+
if (throwError) {
|
|
185
|
+
throw err;
|
|
186
|
+
}
|
|
187
|
+
return resData;
|
|
188
|
+
}
|
|
170
189
|
}
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
190
|
+
);
|
|
191
|
+
}
|
|
192
|
+
request.clearCache = () => {
|
|
193
|
+
cache.clear();
|
|
175
194
|
};
|
|
195
|
+
return request;
|
|
196
|
+
};
|
|
176
197
|
}
|
|
177
|
-
|
|
178
|
-
module.exports = createBaseRequest;
|
|
198
|
+
exports.default = createBaseRequest;
|
|
@@ -1,45 +1,31 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
* @param getterNameMaps 将 getter 函数和 getter 名称一一映射
|
|
10
|
-
* @returns getter object
|
|
11
|
-
*/
|
|
12
|
-
var createStoreGetter = function (store, getters, getterNameMaps) {
|
|
13
|
-
var gettersObj = {};
|
|
14
|
-
Object.keys(getters).forEach(function (key) {
|
|
15
|
-
Object.defineProperty(gettersObj, getterNameMaps[key], {
|
|
16
|
-
get: function () { return getters[key](store.get()); }
|
|
17
|
-
});
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const react = require("react");
|
|
4
|
+
const createStoreGetter = (store, getters, getterNameMaps) => {
|
|
5
|
+
const gettersObj = {};
|
|
6
|
+
Object.keys(getters).forEach((key) => {
|
|
7
|
+
Object.defineProperty(gettersObj, getterNameMaps[key], {
|
|
8
|
+
get: () => getters[key](store.get())
|
|
18
9
|
});
|
|
19
|
-
|
|
10
|
+
});
|
|
11
|
+
return gettersObj;
|
|
20
12
|
};
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
return acc;
|
|
38
|
-
}, {});
|
|
39
|
-
}, [storeData]);
|
|
40
|
-
return reducedData;
|
|
41
|
-
};
|
|
13
|
+
const createStoreGetterMemo = (store, getters, getterNameMaps) => {
|
|
14
|
+
return () => {
|
|
15
|
+
const [storeData] = store.use();
|
|
16
|
+
const reducedData = react.useMemo(() => {
|
|
17
|
+
return Object.keys(getters).reduce(
|
|
18
|
+
(acc, key) => {
|
|
19
|
+
const mappedKey = getterNameMaps[key];
|
|
20
|
+
const getterValue = getters[key](storeData);
|
|
21
|
+
acc[mappedKey] = getterValue;
|
|
22
|
+
return acc;
|
|
23
|
+
},
|
|
24
|
+
{}
|
|
25
|
+
);
|
|
26
|
+
}, [storeData]);
|
|
27
|
+
return reducedData;
|
|
28
|
+
};
|
|
42
29
|
};
|
|
43
|
-
|
|
44
30
|
exports.createStoreGetter = createStoreGetter;
|
|
45
31
|
exports.createStoreGetterMemo = createStoreGetterMemo;
|
|
@@ -1,98 +1,55 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
var react = require('react');
|
|
6
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
|
+
const react = require("react");
|
|
7
4
|
function resolveHookState(nextState, currentState) {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}
|
|
13
|
-
return nextState;
|
|
5
|
+
if (typeof nextState === "function") {
|
|
6
|
+
return nextState.length ? nextState(currentState) : nextState();
|
|
7
|
+
}
|
|
8
|
+
return nextState;
|
|
14
9
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
* 只执行一次的 useEffect hook
|
|
19
|
-
* @param effect 要执行的副作用函数
|
|
20
|
-
*/
|
|
21
|
-
var useEffectOnce = function (effect) {
|
|
22
|
-
react.useEffect(effect, []);
|
|
10
|
+
const isBrowser = typeof window !== "undefined";
|
|
11
|
+
const useEffectOnce = (effect) => {
|
|
12
|
+
react.useEffect(effect, []);
|
|
23
13
|
};
|
|
24
|
-
|
|
25
|
-
* 同构的 useLayoutEffect
|
|
26
|
-
* 在服务端渲染时使用 useEffect,在浏览器环境使用 useLayoutEffect
|
|
27
|
-
*/
|
|
28
|
-
var useIsomorphicLayoutEffect = isBrowser ? react.useLayoutEffect : react.useEffect;
|
|
29
|
-
/**
|
|
30
|
-
* 创建状态存储
|
|
31
|
-
* 提供一个简单的状态管理解决方案,支持组件间状态共享
|
|
32
|
-
*
|
|
33
|
-
* @template S 状态类型
|
|
34
|
-
* @param initialState 初始状态值或初始化函数
|
|
35
|
-
* @returns 包含状态操作方法的对象
|
|
36
|
-
*/
|
|
14
|
+
const useIsomorphicLayoutEffect = isBrowser ? react.useLayoutEffect : react.useEffect;
|
|
37
15
|
function createStateStore(initialState) {
|
|
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
|
-
useIsomorphicLayoutEffect(function () {
|
|
67
|
-
if (!store.setters.includes(stateSetter)) {
|
|
68
|
-
store.setters.push(stateSetter);
|
|
69
|
-
}
|
|
70
|
-
});
|
|
71
|
-
return [globalState, store.setState];
|
|
72
|
-
};
|
|
73
|
-
/** 获取当前状态值 */
|
|
74
|
-
var get = function () { return store.state; };
|
|
75
|
-
/** 设置状态的函数引用 */
|
|
76
|
-
var set = store.setState;
|
|
77
|
-
/**
|
|
78
|
-
* 监听状态变化
|
|
79
|
-
* @param callback 状态变化时的回调函数
|
|
80
|
-
* @returns 取消监听的函数
|
|
81
|
-
*/
|
|
82
|
-
var watch = function (callback) {
|
|
83
|
-
store.watchers.push(callback);
|
|
84
|
-
var close = function () {
|
|
85
|
-
store.watchers = store.watchers.filter(function (watcher) { return watcher !== callback; });
|
|
86
|
-
};
|
|
87
|
-
return close;
|
|
88
|
-
};
|
|
89
|
-
return {
|
|
90
|
-
use: use,
|
|
91
|
-
get: get,
|
|
92
|
-
set: set,
|
|
93
|
-
watch: watch,
|
|
16
|
+
const store = {
|
|
17
|
+
state: initialState instanceof Function ? initialState() : initialState,
|
|
18
|
+
setState(nextState) {
|
|
19
|
+
store.state = resolveHookState(nextState, store.state);
|
|
20
|
+
store.setters.forEach((setter) => setter(store.state));
|
|
21
|
+
store.watchers.forEach((watcher) => watcher(store.state));
|
|
22
|
+
},
|
|
23
|
+
setters: [],
|
|
24
|
+
watchers: []
|
|
25
|
+
};
|
|
26
|
+
const use = () => {
|
|
27
|
+
const [globalState, stateSetter] = react.useState(store.state);
|
|
28
|
+
useEffectOnce(() => () => {
|
|
29
|
+
store.setters = store.setters.filter((setter) => setter !== stateSetter);
|
|
30
|
+
});
|
|
31
|
+
useIsomorphicLayoutEffect(() => {
|
|
32
|
+
if (!store.setters.includes(stateSetter)) {
|
|
33
|
+
store.setters.push(stateSetter);
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
return [globalState, store.setState];
|
|
37
|
+
};
|
|
38
|
+
const get = () => store.state;
|
|
39
|
+
const set = store.setState;
|
|
40
|
+
const watch = (callback) => {
|
|
41
|
+
store.watchers.push(callback);
|
|
42
|
+
const close = () => {
|
|
43
|
+
store.watchers = store.watchers.filter((watcher) => watcher !== callback);
|
|
94
44
|
};
|
|
45
|
+
return close;
|
|
46
|
+
};
|
|
47
|
+
return {
|
|
48
|
+
use,
|
|
49
|
+
get,
|
|
50
|
+
set,
|
|
51
|
+
watch
|
|
52
|
+
};
|
|
95
53
|
}
|
|
96
|
-
|
|
97
54
|
exports.default = createStateStore;
|
|
98
55
|
exports.resolveHookState = resolveHookState;
|
package/cjs/store/index.cjs
CHANGED
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const index = require("./createGetter/index.cjs");
|
|
4
|
+
const index$1 = require("./createStateStore/index.cjs");
|
|
8
5
|
exports.createStoreGetter = index.createStoreGetter;
|
|
9
6
|
exports.createStoreGetterMemo = index.createStoreGetterMemo;
|
|
10
7
|
exports.createStateStore = index$1.default;
|