@tarojs/with-weapp 4.0.0-beta.7 → 4.0.0-beta.9
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/dist/index.esm.js +527 -651
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +527 -665
- package/dist/index.js.map +1 -1
- package/dist/with-weapp.js +531 -658
- package/dist/with-weapp.js.map +1 -1
- package/package.json +4 -3
package/dist/index.js
CHANGED
|
@@ -2,47 +2,20 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var _defineProperty = require('@babel/runtime/helpers/defineProperty');
|
|
6
|
-
var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
|
|
7
|
-
var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
|
|
8
|
-
var _classCallCheck = require('@babel/runtime/helpers/classCallCheck');
|
|
9
|
-
var _createClass = require('@babel/runtime/helpers/createClass');
|
|
10
|
-
var _assertThisInitialized = require('@babel/runtime/helpers/assertThisInitialized');
|
|
11
|
-
var _get = require('@babel/runtime/helpers/get');
|
|
12
|
-
var _inherits = require('@babel/runtime/helpers/inherits');
|
|
13
|
-
var _possibleConstructorReturn = require('@babel/runtime/helpers/possibleConstructorReturn');
|
|
14
|
-
var _getPrototypeOf = require('@babel/runtime/helpers/getPrototypeOf');
|
|
15
|
-
var _typeof = require('@babel/runtime/helpers/typeof');
|
|
16
5
|
var runtime = require('@tarojs/runtime');
|
|
17
6
|
var taro = require('@tarojs/taro');
|
|
18
7
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
var _toConsumableArray__default = /*#__PURE__*/_interopDefaultLegacy(_toConsumableArray);
|
|
23
|
-
var _slicedToArray__default = /*#__PURE__*/_interopDefaultLegacy(_slicedToArray);
|
|
24
|
-
var _classCallCheck__default = /*#__PURE__*/_interopDefaultLegacy(_classCallCheck);
|
|
25
|
-
var _createClass__default = /*#__PURE__*/_interopDefaultLegacy(_createClass);
|
|
26
|
-
var _assertThisInitialized__default = /*#__PURE__*/_interopDefaultLegacy(_assertThisInitialized);
|
|
27
|
-
var _get__default = /*#__PURE__*/_interopDefaultLegacy(_get);
|
|
28
|
-
var _inherits__default = /*#__PURE__*/_interopDefaultLegacy(_inherits);
|
|
29
|
-
var _possibleConstructorReturn__default = /*#__PURE__*/_interopDefaultLegacy(_possibleConstructorReturn);
|
|
30
|
-
var _getPrototypeOf__default = /*#__PURE__*/_interopDefaultLegacy(_getPrototypeOf);
|
|
31
|
-
var _typeof__default = /*#__PURE__*/_interopDefaultLegacy(_typeof);
|
|
32
|
-
|
|
33
|
-
var json = JSON;
|
|
34
|
-
var clone = function clone(obj) {
|
|
35
|
-
return json.parse(stringify(obj));
|
|
36
|
-
};
|
|
37
|
-
var isArray = Array.isArray || function (x) {
|
|
8
|
+
const json = JSON;
|
|
9
|
+
const clone = obj => json.parse(stringify(obj));
|
|
10
|
+
const isArray = Array.isArray || function (x) {
|
|
38
11
|
return {}.toString.call(x) === '[object Array]';
|
|
39
12
|
};
|
|
40
|
-
|
|
41
|
-
|
|
13
|
+
const objectKeys = Object.keys || function (obj) {
|
|
14
|
+
const has = Object.prototype.hasOwnProperty || function () {
|
|
42
15
|
return true;
|
|
43
16
|
};
|
|
44
|
-
|
|
45
|
-
for (
|
|
17
|
+
const keys = [];
|
|
18
|
+
for (const key in obj) {
|
|
46
19
|
if (has.call(obj, key)) keys.push(key);
|
|
47
20
|
}
|
|
48
21
|
return keys;
|
|
@@ -52,20 +25,20 @@ function stringify(obj, opts) {
|
|
|
52
25
|
if (typeof opts === 'function') opts = {
|
|
53
26
|
cmp: opts
|
|
54
27
|
};
|
|
55
|
-
|
|
28
|
+
let space = opts.space || '';
|
|
56
29
|
if (typeof space === 'number') space = Array(space + 1).join(' ');
|
|
57
|
-
|
|
58
|
-
|
|
30
|
+
const cycles = typeof opts.cycles === 'boolean' ? opts.cycles : false;
|
|
31
|
+
const replacer = opts.replacer || function (key, value) {
|
|
59
32
|
return value;
|
|
60
33
|
};
|
|
61
|
-
|
|
34
|
+
const cmp = opts.cmp && function (f) {
|
|
62
35
|
return function (node) {
|
|
63
36
|
return function (a, b) {
|
|
64
|
-
|
|
37
|
+
const aobj = {
|
|
65
38
|
key: a,
|
|
66
39
|
value: node[a]
|
|
67
40
|
};
|
|
68
|
-
|
|
41
|
+
const bobj = {
|
|
69
42
|
key: b,
|
|
70
43
|
value: node[b]
|
|
71
44
|
};
|
|
@@ -73,10 +46,10 @@ function stringify(obj, opts) {
|
|
|
73
46
|
};
|
|
74
47
|
};
|
|
75
48
|
}(opts.cmp);
|
|
76
|
-
|
|
49
|
+
const seen = [];
|
|
77
50
|
return function stringify(parent, key, node, level) {
|
|
78
|
-
|
|
79
|
-
|
|
51
|
+
const indent = space ? '\n' + new Array(level + 1).join(space) : '';
|
|
52
|
+
const colonSeparator = space ? ': ' : ':';
|
|
80
53
|
if (node && node.toJSON && typeof node.toJSON === 'function') {
|
|
81
54
|
node = node.toJSON();
|
|
82
55
|
}
|
|
@@ -84,13 +57,13 @@ function stringify(obj, opts) {
|
|
|
84
57
|
if (node === undefined) {
|
|
85
58
|
return;
|
|
86
59
|
}
|
|
87
|
-
if (
|
|
60
|
+
if (typeof node !== 'object' || node === null) {
|
|
88
61
|
return json.stringify(node);
|
|
89
62
|
}
|
|
90
63
|
if (isArray(node)) {
|
|
91
|
-
|
|
92
|
-
for (
|
|
93
|
-
|
|
64
|
+
const out = [];
|
|
65
|
+
for (let i = 0; i < node.length; i++) {
|
|
66
|
+
const item = stringify(node, i, node[i], level + 1) || json.stringify(null);
|
|
94
67
|
out.push(indent + space + item);
|
|
95
68
|
}
|
|
96
69
|
return '[' + out.join(',') + indent + ']';
|
|
@@ -99,17 +72,17 @@ function stringify(obj, opts) {
|
|
|
99
72
|
if (cycles) return json.stringify('__cycle__');
|
|
100
73
|
throw new TypeError('Converting circular structure to JSON');
|
|
101
74
|
} else seen.push(node);
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
for (
|
|
105
|
-
|
|
106
|
-
|
|
75
|
+
const keys = objectKeys(node).sort(cmp && cmp(node));
|
|
76
|
+
const out = [];
|
|
77
|
+
for (let i = 0; i < keys.length; i++) {
|
|
78
|
+
const key = keys[i];
|
|
79
|
+
const value = stringify(node, key, node[key], level + 1);
|
|
107
80
|
if (!value) continue;
|
|
108
|
-
|
|
109
|
-
|
|
81
|
+
const keyValue = json.stringify(key) + colonSeparator + value;
|
|
82
|
+
out.push(indent + space + keyValue);
|
|
110
83
|
}
|
|
111
84
|
seen.splice(seen.indexOf(node), 1);
|
|
112
|
-
return '{' +
|
|
85
|
+
return '{' + out.join(',') + indent + '}';
|
|
113
86
|
}
|
|
114
87
|
}({
|
|
115
88
|
'': obj
|
|
@@ -117,23 +90,23 @@ function stringify(obj, opts) {
|
|
|
117
90
|
}
|
|
118
91
|
|
|
119
92
|
/*eslint-disable*/
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
93
|
+
const ARRAYTYPE = '[object Array]';
|
|
94
|
+
const OBJECTTYPE = '[object Object]';
|
|
95
|
+
const FUNCTIONTYPE = '[object Function]';
|
|
123
96
|
function diff(current, pre) {
|
|
124
|
-
|
|
97
|
+
const result = {};
|
|
125
98
|
syncKeys(current, pre);
|
|
126
99
|
_diff(current, pre, '', result);
|
|
127
100
|
return result;
|
|
128
101
|
}
|
|
129
102
|
function syncKeys(current, pre) {
|
|
130
103
|
if (current === pre) return;
|
|
131
|
-
|
|
132
|
-
|
|
104
|
+
const rootCurrentType = type(current);
|
|
105
|
+
const rootPreType = type(pre);
|
|
133
106
|
if (rootCurrentType == OBJECTTYPE && rootPreType == OBJECTTYPE) {
|
|
134
107
|
// if(Object.keys(current).length >= Object.keys(pre).length){
|
|
135
|
-
for (
|
|
136
|
-
|
|
108
|
+
for (let key in pre) {
|
|
109
|
+
const currentValue = current[key];
|
|
137
110
|
if (currentValue === undefined) {
|
|
138
111
|
current[key] = null;
|
|
139
112
|
} else {
|
|
@@ -143,7 +116,7 @@ function syncKeys(current, pre) {
|
|
|
143
116
|
// }
|
|
144
117
|
} else if (rootCurrentType == ARRAYTYPE && rootPreType == ARRAYTYPE) {
|
|
145
118
|
if (current.length >= pre.length) {
|
|
146
|
-
pre.forEach(
|
|
119
|
+
pre.forEach((item, index) => {
|
|
147
120
|
syncKeys(current[index], item);
|
|
148
121
|
});
|
|
149
122
|
}
|
|
@@ -151,17 +124,17 @@ function syncKeys(current, pre) {
|
|
|
151
124
|
}
|
|
152
125
|
function _diff(current, pre, path, result) {
|
|
153
126
|
if (current === pre) return;
|
|
154
|
-
|
|
155
|
-
|
|
127
|
+
const rootCurrentType = type(current);
|
|
128
|
+
const rootPreType = type(pre);
|
|
156
129
|
if (rootCurrentType == OBJECTTYPE) {
|
|
157
130
|
if (rootPreType != OBJECTTYPE || Object.keys(current).length < Object.keys(pre).length) {
|
|
158
131
|
setResult(result, path, current);
|
|
159
132
|
} else {
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
133
|
+
for (let key in current) {
|
|
134
|
+
const currentValue = current[key];
|
|
135
|
+
const preValue = pre[key];
|
|
136
|
+
const currentType = type(currentValue);
|
|
137
|
+
const preType = type(preValue);
|
|
165
138
|
if (currentType != ARRAYTYPE && currentType != OBJECTTYPE) {
|
|
166
139
|
if (currentValue != pre[key]) {
|
|
167
140
|
setResult(result, (path == '' ? '' : path + '.') + key, currentValue);
|
|
@@ -173,7 +146,7 @@ function _diff(current, pre, path, result) {
|
|
|
173
146
|
if (currentValue.length < preValue.length) {
|
|
174
147
|
setResult(result, (path == '' ? '' : path + '.') + key, currentValue);
|
|
175
148
|
} else {
|
|
176
|
-
currentValue.forEach(
|
|
149
|
+
currentValue.forEach((item, index) => {
|
|
177
150
|
_diff(item, preValue[index], (path == '' ? '' : path + '.') + key + '[' + index + ']', result);
|
|
178
151
|
});
|
|
179
152
|
}
|
|
@@ -182,14 +155,11 @@ function _diff(current, pre, path, result) {
|
|
|
182
155
|
if (preType != OBJECTTYPE || Object.keys(currentValue).length < Object.keys(preValue).length) {
|
|
183
156
|
setResult(result, (path == '' ? '' : path + '.') + key, currentValue);
|
|
184
157
|
} else {
|
|
185
|
-
for (
|
|
158
|
+
for (let subKey in currentValue) {
|
|
186
159
|
_diff(currentValue[subKey], preValue[subKey], (path == '' ? '' : path + '.') + key + '.' + subKey, result);
|
|
187
160
|
}
|
|
188
161
|
}
|
|
189
162
|
}
|
|
190
|
-
};
|
|
191
|
-
for (var key in current) {
|
|
192
|
-
_loop(key);
|
|
193
163
|
}
|
|
194
164
|
}
|
|
195
165
|
} else if (rootCurrentType == ARRAYTYPE) {
|
|
@@ -199,7 +169,7 @@ function _diff(current, pre, path, result) {
|
|
|
199
169
|
if (current.length < pre.length) {
|
|
200
170
|
setResult(result, path, current);
|
|
201
171
|
} else {
|
|
202
|
-
current.forEach(
|
|
172
|
+
current.forEach((item, index) => {
|
|
203
173
|
_diff(item, pre[index], path + '[' + index + ']', result);
|
|
204
174
|
});
|
|
205
175
|
}
|
|
@@ -217,7 +187,6 @@ function type(obj) {
|
|
|
217
187
|
return Object.prototype.toString.call(obj);
|
|
218
188
|
}
|
|
219
189
|
|
|
220
|
-
var _lifecycleMap;
|
|
221
190
|
var TaroLifeCycles;
|
|
222
191
|
(function (TaroLifeCycles) {
|
|
223
192
|
TaroLifeCycles["WillMount"] = "componentWillMount";
|
|
@@ -226,16 +195,20 @@ var TaroLifeCycles;
|
|
|
226
195
|
TaroLifeCycles["DidHide"] = "componentDidHide";
|
|
227
196
|
TaroLifeCycles["WillUnmount"] = "componentWillUnmount";
|
|
228
197
|
})(TaroLifeCycles || (TaroLifeCycles = {}));
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
198
|
+
const lifecycleMap = {
|
|
199
|
+
[TaroLifeCycles.WillMount]: ['created'],
|
|
200
|
+
[TaroLifeCycles.DidMount]: ['attached'],
|
|
201
|
+
[TaroLifeCycles.DidShow]: ['onShow'],
|
|
202
|
+
[TaroLifeCycles.DidHide]: ['onHide'],
|
|
203
|
+
[TaroLifeCycles.WillUnmount]: ['detached', 'onUnload']
|
|
204
|
+
};
|
|
205
|
+
const lifecycles = new Set(['ready']);
|
|
206
|
+
for (const key in lifecycleMap) {
|
|
207
|
+
const lifecycle = lifecycleMap[key];
|
|
208
|
+
lifecycle.forEach(l => lifecycles.add(l));
|
|
236
209
|
}
|
|
237
|
-
|
|
238
|
-
|
|
210
|
+
const uniquePageLifecycle = ['onPullDownRefresh', 'onReachBottom', 'onShareAppMessage', 'onShareTimeline', 'onAddToFavorites', 'onPageScroll', 'onResize', 'onTabItemTap'];
|
|
211
|
+
const appOptions = ['onLaunch', 'onShow', 'onHide', 'onError', 'onPageNotFound', 'onUnhandledRejection', 'onThemeChange'];
|
|
239
212
|
|
|
240
213
|
/**
|
|
241
214
|
* Simple bind, faster than native
|
|
@@ -243,7 +216,7 @@ var appOptions = ['onLaunch', 'onShow', 'onHide', 'onError', 'onPageNotFound', '
|
|
|
243
216
|
function bind(fn /*: Function */, ctx /*: Object */) {
|
|
244
217
|
if (!fn) return false;
|
|
245
218
|
function boundFn(a) {
|
|
246
|
-
|
|
219
|
+
const l /*: number */ = arguments.length;
|
|
247
220
|
return l ? l > 1 ? fn.apply(ctx, arguments) : fn.call(ctx, a) : fn.call(ctx);
|
|
248
221
|
}
|
|
249
222
|
// record original fn length
|
|
@@ -257,7 +230,7 @@ function safeGet(obj, propsArg, defaultValue) {
|
|
|
257
230
|
if (!obj) {
|
|
258
231
|
return defaultValue;
|
|
259
232
|
}
|
|
260
|
-
|
|
233
|
+
let props, prop;
|
|
261
234
|
if (Array.isArray(propsArg)) {
|
|
262
235
|
props = propsArg.slice(0);
|
|
263
236
|
}
|
|
@@ -265,7 +238,7 @@ function safeGet(obj, propsArg, defaultValue) {
|
|
|
265
238
|
props = propsArg.replace(/\[(.+?)\]/g, '.$1');
|
|
266
239
|
props = props.split('.');
|
|
267
240
|
}
|
|
268
|
-
if (
|
|
241
|
+
if (typeof propsArg === 'symbol') {
|
|
269
242
|
props = [propsArg];
|
|
270
243
|
}
|
|
271
244
|
if (!Array.isArray(props)) {
|
|
@@ -288,14 +261,14 @@ function safeSet(obj, props, value) {
|
|
|
288
261
|
props = props.replace(/\[(.+?)\]/g, '.$1');
|
|
289
262
|
props = props.split('.');
|
|
290
263
|
}
|
|
291
|
-
if (
|
|
264
|
+
if (typeof props === 'symbol') {
|
|
292
265
|
props = [props];
|
|
293
266
|
}
|
|
294
|
-
|
|
267
|
+
const lastProp = props.pop();
|
|
295
268
|
if (!lastProp) {
|
|
296
269
|
return false;
|
|
297
270
|
}
|
|
298
|
-
|
|
271
|
+
let thisProp;
|
|
299
272
|
while (thisProp = props.shift()) {
|
|
300
273
|
if (typeof obj[thisProp] === 'undefined') {
|
|
301
274
|
obj[thisProp] = {};
|
|
@@ -303,12 +276,12 @@ function safeSet(obj, props, value) {
|
|
|
303
276
|
// 直接按路径修改 this.state 可能会导致 nextProps 也被修改
|
|
304
277
|
// 因此按路径寻找时,每一层都复制一遍
|
|
305
278
|
if (Array.isArray(obj[thisProp])) {
|
|
306
|
-
obj[thisProp] =
|
|
307
|
-
} else if (
|
|
279
|
+
obj[thisProp] = [...obj[thisProp]];
|
|
280
|
+
} else if (typeof obj[thisProp] === 'object') {
|
|
308
281
|
obj[thisProp] = Object.assign({}, obj[thisProp]);
|
|
309
282
|
}
|
|
310
283
|
obj = obj[thisProp];
|
|
311
|
-
if (!obj ||
|
|
284
|
+
if (!obj || typeof obj !== 'object') {
|
|
312
285
|
return false;
|
|
313
286
|
}
|
|
314
287
|
}
|
|
@@ -318,26 +291,24 @@ function safeSet(obj, props, value) {
|
|
|
318
291
|
function report(msg) {
|
|
319
292
|
console.warn('[Taro Convert Warning] ' + msg);
|
|
320
293
|
}
|
|
321
|
-
|
|
294
|
+
const nonsupport = new Map([['onError', '不支持 App 的 onError 生命周期方法。'], ['onPageNotFound', '不支持 App 的 onPageNotFound 生命周期方法。'], ['onUnhandledRejection', '不支持 App 的 onUnhandledRejection 生命周期方法。'], ['onThemeChange', '不支持 App 的 onThemeChange 生命周期方法。'], ['moved', '不支持自定义组件的 moved 生命周期。'], ['externalClasses', '不支持自定义组件的 externalClasses 功能。'], ['relations', '不支持自定义组件的 relations 功能。'], ['options', '不支持自定义组件的 options 功能。'], ['definitionFilter', '不支持自定义组件的 definitionFilter 功能。'], ['selectComponent', 'selectComponent 方法产生不到目标效果,请使用 React 的 ref 进行重构。'], ['selectAllComponents', 'selectAllComponents 方法产生不到目标效果,请使用 React 的 ref 进行重构。'], ['selectOwnerComponent', 'selectOwnerComponent 方法产生不到目标效果,请使用 React 语法重构。'], ['groupSetData', 'groupSetData 方法产生不到目标效果,请使用 React 语法重构。']]);
|
|
322
295
|
function flattenBehaviors(behavior, behaviorMap) {
|
|
323
296
|
if (typeof behavior === 'string') {
|
|
324
|
-
return report(
|
|
297
|
+
return report(`不支持使用内置 Behavior: [${behavior}]`);
|
|
325
298
|
}
|
|
326
|
-
|
|
299
|
+
const subBehaviors = behavior.behaviors;
|
|
327
300
|
if (subBehaviors === null || subBehaviors === void 0 ? void 0 : subBehaviors.length) {
|
|
328
|
-
subBehaviors.forEach(
|
|
329
|
-
return flattenBehaviors(subBehavior, behaviorMap);
|
|
330
|
-
});
|
|
301
|
+
subBehaviors.forEach(subBehavior => flattenBehaviors(subBehavior, behaviorMap));
|
|
331
302
|
}
|
|
332
|
-
Object.keys(behavior).forEach(
|
|
303
|
+
Object.keys(behavior).forEach(key => {
|
|
333
304
|
// 不支持的属性
|
|
334
305
|
if (nonsupport.has(key)) {
|
|
335
|
-
|
|
306
|
+
const advise = nonsupport.get(key);
|
|
336
307
|
return report(advise);
|
|
337
308
|
}
|
|
338
309
|
if (behaviorMap.has(key)) {
|
|
339
|
-
|
|
340
|
-
|
|
310
|
+
const list = behaviorMap.get(key);
|
|
311
|
+
const value = behavior[key];
|
|
341
312
|
list.push(value);
|
|
342
313
|
}
|
|
343
314
|
});
|
|
@@ -346,21 +317,21 @@ function flattenBehaviors(behavior, behaviorMap) {
|
|
|
346
317
|
/**
|
|
347
318
|
* 该模块仅存放 convert 转换时用到的工具函数或变量
|
|
348
319
|
*/
|
|
349
|
-
|
|
320
|
+
const cacheOptions = {
|
|
350
321
|
cacheOptions: {},
|
|
351
|
-
setOptionsToCache: function
|
|
322
|
+
setOptionsToCache: function (options) {
|
|
352
323
|
if (Object.keys(options).length !== 0) {
|
|
353
324
|
this.cacheOptions = options;
|
|
354
325
|
}
|
|
355
326
|
},
|
|
356
|
-
getOptionsFromCache: function
|
|
327
|
+
getOptionsFromCache: function () {
|
|
357
328
|
return this.cacheOptions;
|
|
358
329
|
}
|
|
359
330
|
};
|
|
360
331
|
function toCamelCase(s) {
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
for (
|
|
332
|
+
let camel = '';
|
|
333
|
+
let nextCap = false;
|
|
334
|
+
for (let i = 0; i < s.length; i++) {
|
|
364
335
|
if (s[i] !== '-') {
|
|
365
336
|
camel += nextCap ? s[i].toUpperCase() : s[i];
|
|
366
337
|
nextCap = false;
|
|
@@ -370,25 +341,23 @@ function toCamelCase(s) {
|
|
|
370
341
|
}
|
|
371
342
|
return camel;
|
|
372
343
|
}
|
|
373
|
-
|
|
344
|
+
const convertToArray = function (value, fn) {
|
|
374
345
|
if (value instanceof Array) {
|
|
375
346
|
return value.map(fn);
|
|
376
347
|
} else if (typeof value === 'number') {
|
|
377
348
|
return Array.from({
|
|
378
349
|
length: value
|
|
379
|
-
},
|
|
380
|
-
return index;
|
|
381
|
-
}).map(fn);
|
|
350
|
+
}, (_, index) => index).map(fn);
|
|
382
351
|
} else if (typeof value === 'string') {
|
|
383
352
|
return Array.from(value).map(fn);
|
|
384
|
-
} else if (
|
|
385
|
-
|
|
353
|
+
} else if (typeof value === 'object' && value !== null && Object.getPrototypeOf(value) === Object.prototype) {
|
|
354
|
+
const result = Object.keys(value).map(item => {
|
|
386
355
|
return fn(value[item], item);
|
|
387
356
|
});
|
|
388
357
|
return result;
|
|
389
358
|
}
|
|
390
359
|
};
|
|
391
|
-
|
|
360
|
+
const getTarget = (target, Taro) => {
|
|
392
361
|
if (!target) {
|
|
393
362
|
return {
|
|
394
363
|
dataset: {}
|
|
@@ -400,11 +369,11 @@ var getTarget = function getTarget(target, Taro) {
|
|
|
400
369
|
dataset: target.fullDataset
|
|
401
370
|
};
|
|
402
371
|
}
|
|
403
|
-
|
|
372
|
+
const fullDataset = {};
|
|
404
373
|
// 获取元素的所有属性
|
|
405
|
-
|
|
374
|
+
const targetAttrKeys = Object.keys(target);
|
|
406
375
|
// 遍历所有属性
|
|
407
|
-
for (
|
|
376
|
+
for (let i = 0; i < targetAttrKeys.length; i++) {
|
|
408
377
|
if (targetAttrKeys[i].startsWith('data-')) {
|
|
409
378
|
fullDataset[toCamelCase(targetAttrKeys[i].replace(/^data-/, '').toLowerCase())] = target[targetAttrKeys[i]];
|
|
410
379
|
}
|
|
@@ -417,16 +386,11 @@ var getTarget = function getTarget(target, Taro) {
|
|
|
417
386
|
return target;
|
|
418
387
|
};
|
|
419
388
|
|
|
420
|
-
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|
421
|
-
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
422
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
423
|
-
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf__default["default"](Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf__default["default"](this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn__default["default"](this, result); }; }
|
|
424
|
-
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
425
389
|
function defineGetter(component, key, getter) {
|
|
426
390
|
Object.defineProperty(component, key, {
|
|
427
391
|
enumerable: true,
|
|
428
392
|
configurable: true,
|
|
429
|
-
get:
|
|
393
|
+
get: () => {
|
|
430
394
|
if (getter === 'props') {
|
|
431
395
|
return component.props;
|
|
432
396
|
}
|
|
@@ -445,32 +409,31 @@ function propToState(newValue, _oldValue, key) {
|
|
|
445
409
|
function isFunction(o) {
|
|
446
410
|
return typeof o === 'function';
|
|
447
411
|
}
|
|
448
|
-
function withWeapp(weappConf) {
|
|
449
|
-
|
|
450
|
-
if (_typeof__default["default"](weappConf) === 'object' && Object.keys(weappConf).length === 0) {
|
|
412
|
+
function withWeapp(weappConf, isApp = false) {
|
|
413
|
+
if (typeof weappConf === 'object' && Object.keys(weappConf).length === 0) {
|
|
451
414
|
report('withWeapp 请传入“App/页面/组件“的配置对象。如果原生写法使用了基类,请将基类组合后的配置对象传入,详情请参考文档。');
|
|
452
415
|
}
|
|
453
|
-
return
|
|
416
|
+
return ConnectComponent => {
|
|
454
417
|
var _a;
|
|
455
|
-
|
|
456
|
-
|
|
418
|
+
const behaviorMap = new Map([['properties', []], ['data', []], ['methods', []], ['created', []], ['attached', []], ['ready', []], ['detached', []], ['lifetimes', []]]);
|
|
419
|
+
const behaviorProperties = {};
|
|
457
420
|
if ((_a = weappConf.behaviors) === null || _a === void 0 ? void 0 : _a.length) {
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
421
|
+
const {
|
|
422
|
+
behaviors
|
|
423
|
+
} = weappConf;
|
|
424
|
+
behaviors.forEach(behavior => flattenBehaviors(behavior, behaviorMap));
|
|
425
|
+
const propertiesList = behaviorMap.get('properties');
|
|
463
426
|
if (propertiesList.length) {
|
|
464
|
-
propertiesList.forEach(
|
|
427
|
+
propertiesList.forEach(property => {
|
|
465
428
|
Object.assign(behaviorProperties, property);
|
|
466
429
|
});
|
|
467
|
-
Object.keys(behaviorProperties).forEach(
|
|
468
|
-
|
|
430
|
+
Object.keys(behaviorProperties).forEach(propName => {
|
|
431
|
+
const propValue = behaviorProperties[propName];
|
|
469
432
|
if (!weappConf.properties) {
|
|
470
433
|
weappConf.properties = {};
|
|
471
434
|
}
|
|
472
435
|
if (!weappConf.properties.hasOwnProperty(propName)) {
|
|
473
|
-
if (propValue &&
|
|
436
|
+
if (propValue && typeof propValue === 'object' && propValue.value) {
|
|
474
437
|
propValue.value = clone(propValue.value);
|
|
475
438
|
}
|
|
476
439
|
weappConf.properties[propName] = propValue;
|
|
@@ -478,45 +441,38 @@ function withWeapp(weappConf) {
|
|
|
478
441
|
});
|
|
479
442
|
}
|
|
480
443
|
}
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
var _this;
|
|
486
|
-
_classCallCheck__default["default"](this, BaseComponent);
|
|
487
|
-
_this = _super.call(this, props);
|
|
488
|
-
_this._observeProps = [];
|
|
444
|
+
class BaseComponent extends ConnectComponent {
|
|
445
|
+
constructor(props) {
|
|
446
|
+
super(props);
|
|
447
|
+
this._observeProps = [];
|
|
489
448
|
// mixins 可以多次调用生命周期
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
args[_key - 1] = arguments[_key];
|
|
501
|
-
}
|
|
502
|
-
if (isFunction(func)) func.apply(_assertThisInitialized__default["default"](_this), args);
|
|
449
|
+
this.willMounts = [];
|
|
450
|
+
this.didMounts = [];
|
|
451
|
+
this.didHides = [];
|
|
452
|
+
this.didShows = [];
|
|
453
|
+
this.willUnmounts = [];
|
|
454
|
+
this.eventDestroyList = [];
|
|
455
|
+
this.current = runtime.getCurrentInstance();
|
|
456
|
+
this.taroGlobalData = Object.create(null);
|
|
457
|
+
this.safeExecute = (func, ...args) => {
|
|
458
|
+
if (isFunction(func)) func.apply(this, args);
|
|
503
459
|
};
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
if (
|
|
507
|
-
oldState = clone(
|
|
460
|
+
this.setData = (obj, callback) => {
|
|
461
|
+
let oldState;
|
|
462
|
+
if (this.observers && Object.keys(Object.keys(this.observers))) {
|
|
463
|
+
oldState = clone(this.state);
|
|
508
464
|
}
|
|
509
|
-
Object.keys(obj).forEach(
|
|
510
|
-
safeSet(
|
|
465
|
+
Object.keys(obj).forEach(key => {
|
|
466
|
+
safeSet(this.state, key, obj[key]);
|
|
511
467
|
});
|
|
512
|
-
|
|
513
|
-
|
|
468
|
+
this.setState(this.state, () => {
|
|
469
|
+
this.triggerObservers(this.state, oldState);
|
|
514
470
|
if (callback) {
|
|
515
|
-
callback.call(
|
|
471
|
+
callback.call(this);
|
|
516
472
|
}
|
|
517
473
|
});
|
|
518
474
|
};
|
|
519
|
-
|
|
475
|
+
this.triggerEvent = (eventName, detail, options) => {
|
|
520
476
|
if (options) {
|
|
521
477
|
report('triggerEvent 不支持事件选项。');
|
|
522
478
|
}
|
|
@@ -526,561 +482,467 @@ function withWeapp(weappConf) {
|
|
|
526
482
|
return match[1].toUpperCase();
|
|
527
483
|
});
|
|
528
484
|
}
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
for (
|
|
485
|
+
const props = this.props;
|
|
486
|
+
const dataset = {};
|
|
487
|
+
for (const key in props) {
|
|
532
488
|
if (!key.startsWith('data-')) continue;
|
|
533
489
|
dataset[key.replace(/^data-/, '')] = props[key];
|
|
534
490
|
}
|
|
535
|
-
|
|
491
|
+
const func = props[`on${eventName[0].toUpperCase()}${eventName.slice(1)}`];
|
|
536
492
|
if (isFunction(func)) {
|
|
537
|
-
func.call(
|
|
493
|
+
func.call(this, {
|
|
538
494
|
type: eventName,
|
|
539
|
-
detail
|
|
495
|
+
detail,
|
|
540
496
|
target: {
|
|
541
497
|
id: props.id || '',
|
|
542
|
-
dataset
|
|
498
|
+
dataset
|
|
543
499
|
},
|
|
544
500
|
currentTarget: {
|
|
545
501
|
id: props.id || '',
|
|
546
|
-
dataset
|
|
502
|
+
dataset
|
|
547
503
|
}
|
|
548
504
|
});
|
|
549
505
|
}
|
|
550
506
|
};
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
defineGetter(
|
|
564
|
-
defineGetter(
|
|
565
|
-
return _this;
|
|
507
|
+
this.hasBehavior = this.componentMethodsProxy('hasBehavior');
|
|
508
|
+
this.createSelectorQuery = this.componentMethodsProxy('createSelectorQuery');
|
|
509
|
+
this.createIntersectionObserver = this.componentMethodsProxy('createIntersectionObserver');
|
|
510
|
+
this.createMediaQueryObserver = this.componentMethodsProxy('createMediaQueryObserver');
|
|
511
|
+
this.getRelationNodes = this.componentMethodsProxy('getRelationNodes');
|
|
512
|
+
this.getTabBar = this.componentMethodsProxy('getTabBar');
|
|
513
|
+
this.getPageId = this.componentMethodsProxy('getPageId');
|
|
514
|
+
this.animate = this.componentMethodsProxy('animate');
|
|
515
|
+
this.clearAnimation = this.componentMethodsProxy('clearAnimation');
|
|
516
|
+
this.setUpdatePerformanceListener = this.componentMethodsProxy('setUpdatePerformanceListener');
|
|
517
|
+
this.state = this.state || {};
|
|
518
|
+
this.init(weappConf);
|
|
519
|
+
defineGetter(this, 'data', 'state');
|
|
520
|
+
defineGetter(this, 'properties', 'props');
|
|
566
521
|
}
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
} else if (propValue.name === 'Number') {
|
|
588
|
-
properties[propKey] = 0;
|
|
589
|
-
} else {
|
|
590
|
-
properties[propKey] = null;
|
|
591
|
-
}
|
|
592
|
-
} else if (_typeof__default["default"](propValue) === 'object') {
|
|
593
|
-
// propValue为对象时
|
|
594
|
-
properties[propKey] = propValue.value;
|
|
595
|
-
if (propValue.observer) {
|
|
596
|
-
observers.push(propValue.observer);
|
|
597
|
-
}
|
|
522
|
+
initProps(props) {
|
|
523
|
+
const properties = {};
|
|
524
|
+
for (const propKey in props) {
|
|
525
|
+
if (props.hasOwnProperty(propKey)) {
|
|
526
|
+
const propValue = props[propKey];
|
|
527
|
+
// propValue 可能是 null, 构造函数, 对象
|
|
528
|
+
const observers = [propToState];
|
|
529
|
+
if (propValue === null || propValue === undefined) {
|
|
530
|
+
// propValue为null、undefined情况
|
|
531
|
+
properties[propKey] = null;
|
|
532
|
+
} else if (isFunction(propValue)) {
|
|
533
|
+
// propValue为Function,即Array、String、Boolean等情况时
|
|
534
|
+
if (propValue.name === 'Array') {
|
|
535
|
+
properties[propKey] = [];
|
|
536
|
+
} else if (propValue.name === 'String') {
|
|
537
|
+
properties[propKey] = '';
|
|
538
|
+
} else if (propValue.name === 'Boolean') {
|
|
539
|
+
properties[propKey] = false;
|
|
540
|
+
} else if (propValue.name === 'Number') {
|
|
541
|
+
properties[propKey] = 0;
|
|
598
542
|
} else {
|
|
599
543
|
properties[propKey] = null;
|
|
600
544
|
}
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
545
|
+
} else if (typeof propValue === 'object') {
|
|
546
|
+
// propValue为对象时
|
|
547
|
+
properties[propKey] = propValue.value;
|
|
548
|
+
if (propValue.observer) {
|
|
549
|
+
observers.push(propValue.observer);
|
|
550
|
+
}
|
|
551
|
+
} else {
|
|
552
|
+
properties[propKey] = null;
|
|
605
553
|
}
|
|
554
|
+
this._observeProps.push({
|
|
555
|
+
name: propKey,
|
|
556
|
+
observers: observers
|
|
557
|
+
});
|
|
606
558
|
}
|
|
607
|
-
this.state = Object.assign(Object.assign({}, properties), this.state);
|
|
608
559
|
}
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
switch (key) {
|
|
624
|
-
case 'created':
|
|
625
|
-
case 'attached':
|
|
626
|
-
case 'detached':
|
|
627
|
-
case 'ready':
|
|
628
|
-
list.forEach(function (fn) {
|
|
629
|
-
return _this2.initLifeCycles(key, fn);
|
|
630
|
-
});
|
|
631
|
-
break;
|
|
632
|
-
}
|
|
633
|
-
};
|
|
634
|
-
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
635
|
-
_loop();
|
|
636
|
-
}
|
|
637
|
-
} catch (err) {
|
|
638
|
-
_iterator.e(err);
|
|
639
|
-
} finally {
|
|
640
|
-
_iterator.f();
|
|
560
|
+
this.state = Object.assign(Object.assign({}, properties), this.state);
|
|
561
|
+
}
|
|
562
|
+
init(options) {
|
|
563
|
+
var _a, _b, _c;
|
|
564
|
+
// 处理 Behaviors
|
|
565
|
+
if ((_a = options.behaviors) === null || _a === void 0 ? void 0 : _a.length) {
|
|
566
|
+
for (const [key, list] of behaviorMap.entries()) {
|
|
567
|
+
switch (key) {
|
|
568
|
+
case 'created':
|
|
569
|
+
case 'attached':
|
|
570
|
+
case 'detached':
|
|
571
|
+
case 'ready':
|
|
572
|
+
list.forEach(fn => this.initLifeCycles(key, fn));
|
|
573
|
+
break;
|
|
641
574
|
}
|
|
642
575
|
}
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
} else {
|
|
661
|
-
this.state = Object.assign(Object.assign({}, confValue), this.state);
|
|
576
|
+
}
|
|
577
|
+
for (const confKey in options) {
|
|
578
|
+
// 不支持的属性
|
|
579
|
+
if (nonsupport.has(confKey)) {
|
|
580
|
+
const advise = nonsupport.get(confKey);
|
|
581
|
+
report(advise);
|
|
582
|
+
}
|
|
583
|
+
const confValue = options[confKey];
|
|
584
|
+
switch (confKey) {
|
|
585
|
+
case 'behaviors':
|
|
586
|
+
break;
|
|
587
|
+
case 'data':
|
|
588
|
+
{
|
|
589
|
+
if (isApp) {
|
|
590
|
+
this[confKey] = confValue;
|
|
591
|
+
if (!appOptions.includes(confKey)) {
|
|
592
|
+
this.defineProperty(this.taroGlobalData, confKey, this);
|
|
662
593
|
}
|
|
663
|
-
|
|
594
|
+
} else {
|
|
595
|
+
this.state = Object.assign(Object.assign({}, confValue), this.state);
|
|
664
596
|
}
|
|
665
|
-
case 'properties':
|
|
666
|
-
this.initProps(Object.assign(behaviorProperties, confValue));
|
|
667
597
|
break;
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
598
|
+
}
|
|
599
|
+
case 'properties':
|
|
600
|
+
this.initProps(Object.assign(behaviorProperties, confValue));
|
|
601
|
+
break;
|
|
602
|
+
case 'methods':
|
|
603
|
+
for (const key in confValue) {
|
|
604
|
+
const method = confValue[key];
|
|
605
|
+
this[key] = bind(method, this);
|
|
606
|
+
}
|
|
607
|
+
break;
|
|
608
|
+
case 'lifetimes':
|
|
609
|
+
for (const key in confValue) {
|
|
610
|
+
this.initLifeCycles(key, confValue[key]);
|
|
611
|
+
}
|
|
612
|
+
break;
|
|
613
|
+
case 'pageLifetimes':
|
|
614
|
+
for (const key in confValue) {
|
|
615
|
+
const cb = confValue[key];
|
|
616
|
+
switch (key) {
|
|
617
|
+
case 'show':
|
|
618
|
+
{
|
|
619
|
+
this.initLifeCycleListener('show', cb);
|
|
620
|
+
break;
|
|
621
|
+
}
|
|
622
|
+
case 'hide':
|
|
623
|
+
{
|
|
624
|
+
this.initLifeCycleListener('hide', cb);
|
|
625
|
+
break;
|
|
626
|
+
}
|
|
627
|
+
case 'resize':
|
|
628
|
+
{
|
|
629
|
+
report('不支持组件所在页面的生命周期 pageLifetimes.resize。');
|
|
630
|
+
break;
|
|
631
|
+
}
|
|
672
632
|
}
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
633
|
+
}
|
|
634
|
+
break;
|
|
635
|
+
default:
|
|
636
|
+
if (lifecycles.has(confKey)) {
|
|
637
|
+
// 优先使用 lifetimes 中定义的生命周期
|
|
638
|
+
if ((_b = options.lifetimes) === null || _b === void 0 ? void 0 : _b[confKey]) {
|
|
639
|
+
break;
|
|
677
640
|
}
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
{
|
|
685
|
-
this.initLifeCycleListener('show', cb);
|
|
686
|
-
break;
|
|
687
|
-
}
|
|
688
|
-
case 'hide':
|
|
689
|
-
{
|
|
690
|
-
this.initLifeCycleListener('hide', cb);
|
|
691
|
-
break;
|
|
692
|
-
}
|
|
693
|
-
case 'resize':
|
|
694
|
-
{
|
|
695
|
-
report('不支持组件所在页面的生命周期 pageLifetimes.resize。');
|
|
696
|
-
break;
|
|
697
|
-
}
|
|
698
|
-
}
|
|
641
|
+
const lifecycle = options[confKey];
|
|
642
|
+
this.initLifeCycles(confKey, lifecycle);
|
|
643
|
+
} else if (isFunction(confValue)) {
|
|
644
|
+
this[confKey] = bind(confValue, this);
|
|
645
|
+
if (isApp && !appOptions.includes(confKey)) {
|
|
646
|
+
this.defineProperty(this.taroGlobalData, confKey, this);
|
|
699
647
|
}
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
// 优先使用 lifetimes 中定义的生命周期
|
|
704
|
-
if ((_b = options.lifetimes) === null || _b === void 0 ? void 0 : _b[confKey]) {
|
|
705
|
-
break;
|
|
706
|
-
}
|
|
707
|
-
var lifecycle = options[confKey];
|
|
708
|
-
this.initLifeCycles(confKey, lifecycle);
|
|
709
|
-
} else if (isFunction(confValue)) {
|
|
710
|
-
this[confKey] = bind(confValue, this);
|
|
711
|
-
if (isApp && !appOptions.includes(confKey)) {
|
|
712
|
-
this.defineProperty(this.taroGlobalData, confKey, this);
|
|
713
|
-
}
|
|
714
|
-
// 原生页面和 Taro 页面中共计只能定义一次的生命周期
|
|
715
|
-
if (uniquePageLifecycle.includes(confKey) && ConnectComponent.prototype[confKey]) {
|
|
716
|
-
report("\u751F\u547D\u5468\u671F ".concat(confKey, " \u5DF2\u5728\u539F\u751F\u90E8\u5206\u8FDB\u884C\u5B9A\u4E49\uFF0CReact \u90E8\u5206\u7684\u5B9A\u4E49\u5C06\u4E0D\u4F1A\u88AB\u6267\u884C\u3002"));
|
|
717
|
-
}
|
|
718
|
-
} else {
|
|
719
|
-
this[confKey] = confValue;
|
|
720
|
-
if (isApp && !appOptions.includes(confKey)) {
|
|
721
|
-
this.defineProperty(this.taroGlobalData, confKey, this);
|
|
722
|
-
}
|
|
648
|
+
// 原生页面和 Taro 页面中共计只能定义一次的生命周期
|
|
649
|
+
if (uniquePageLifecycle.includes(confKey) && ConnectComponent.prototype[confKey]) {
|
|
650
|
+
report(`生命周期 ${confKey} 已在原生部分进行定义,React 部分的定义将不会被执行。`);
|
|
723
651
|
}
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
if ((_c = options.behaviors) === null || _c === void 0 ? void 0 : _c.length) {
|
|
729
|
-
var behaviorData = {};
|
|
730
|
-
var methods = {};
|
|
731
|
-
var _iterator2 = _createForOfIteratorHelper(behaviorMap.entries()),
|
|
732
|
-
_step2;
|
|
733
|
-
try {
|
|
734
|
-
var _loop2 = function _loop2() {
|
|
735
|
-
var _step2$value = _slicedToArray__default["default"](_step2.value, 2),
|
|
736
|
-
key = _step2$value[0],
|
|
737
|
-
list = _step2$value[1];
|
|
738
|
-
switch (key) {
|
|
739
|
-
case 'data':
|
|
740
|
-
[].concat(_toConsumableArray__default["default"](list), [_this2.state]).forEach(function (dataObject, index) {
|
|
741
|
-
Object.keys(dataObject).forEach(function (dataKey) {
|
|
742
|
-
var value = dataObject[dataKey];
|
|
743
|
-
var preValue = behaviorData[dataKey];
|
|
744
|
-
var valueType = _typeof__default["default"](value);
|
|
745
|
-
var preValueType = _typeof__default["default"](preValue);
|
|
746
|
-
if (valueType === 'object') {
|
|
747
|
-
if (!value) {
|
|
748
|
-
behaviorData[dataKey] = value;
|
|
749
|
-
} else if (preValueType !== 'object' || !preValueType || Array.isArray(value)) {
|
|
750
|
-
behaviorData[dataKey] = index === list.length ? value : clone(value);
|
|
751
|
-
} else {
|
|
752
|
-
var newVal = Object.assign({}, preValue, value);
|
|
753
|
-
behaviorData[dataKey] = index === list.length ? newVal : clone(newVal);
|
|
754
|
-
}
|
|
755
|
-
} else {
|
|
756
|
-
behaviorData[dataKey] = value;
|
|
757
|
-
}
|
|
758
|
-
});
|
|
759
|
-
});
|
|
760
|
-
_this2.state = behaviorData;
|
|
761
|
-
break;
|
|
762
|
-
case 'methods':
|
|
763
|
-
list.forEach(function (methodsObject) {
|
|
764
|
-
Object.assign(methods, methodsObject);
|
|
765
|
-
});
|
|
766
|
-
Object.keys(methods).forEach(function (methodName) {
|
|
767
|
-
if (!_this2[methodName]) {
|
|
768
|
-
var _method = methods[methodName];
|
|
769
|
-
_this2[methodName] = bind(_method, _this2);
|
|
770
|
-
}
|
|
771
|
-
});
|
|
772
|
-
break;
|
|
773
|
-
case 'lifetimes':
|
|
774
|
-
list.forEach(function (lifetimesObject) {
|
|
775
|
-
for (var _key4 in lifetimesObject) {
|
|
776
|
-
_this2.initLifeCycles(_key4, lifetimesObject[_key4]);
|
|
777
|
-
}
|
|
778
|
-
});
|
|
779
|
-
break;
|
|
780
|
-
default:
|
|
781
|
-
break;
|
|
652
|
+
} else {
|
|
653
|
+
this[confKey] = confValue;
|
|
654
|
+
if (isApp && !appOptions.includes(confKey)) {
|
|
655
|
+
this.defineProperty(this.taroGlobalData, confKey, this);
|
|
782
656
|
}
|
|
783
|
-
};
|
|
784
|
-
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
785
|
-
_loop2();
|
|
786
657
|
}
|
|
787
|
-
|
|
788
|
-
_iterator2.e(err);
|
|
789
|
-
} finally {
|
|
790
|
-
_iterator2.f();
|
|
791
|
-
}
|
|
658
|
+
break;
|
|
792
659
|
}
|
|
793
660
|
}
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
661
|
+
// 处理 Behaviors
|
|
662
|
+
if ((_c = options.behaviors) === null || _c === void 0 ? void 0 : _c.length) {
|
|
663
|
+
const behaviorData = {};
|
|
664
|
+
const methods = {};
|
|
665
|
+
for (const [key, list] of behaviorMap.entries()) {
|
|
666
|
+
switch (key) {
|
|
667
|
+
case 'data':
|
|
668
|
+
[...list, this.state].forEach((dataObject, index) => {
|
|
669
|
+
Object.keys(dataObject).forEach(dataKey => {
|
|
670
|
+
const value = dataObject[dataKey];
|
|
671
|
+
const preValue = behaviorData[dataKey];
|
|
672
|
+
const valueType = typeof value;
|
|
673
|
+
const preValueType = typeof preValue;
|
|
674
|
+
if (valueType === 'object') {
|
|
675
|
+
if (!value) {
|
|
676
|
+
behaviorData[dataKey] = value;
|
|
677
|
+
} else if (preValueType !== 'object' || !preValueType || Array.isArray(value)) {
|
|
678
|
+
behaviorData[dataKey] = index === list.length ? value : clone(value);
|
|
679
|
+
} else {
|
|
680
|
+
const newVal = Object.assign({}, preValue, value);
|
|
681
|
+
behaviorData[dataKey] = index === list.length ? newVal : clone(newVal);
|
|
682
|
+
}
|
|
683
|
+
} else {
|
|
684
|
+
behaviorData[dataKey] = value;
|
|
685
|
+
}
|
|
686
|
+
});
|
|
687
|
+
});
|
|
688
|
+
this.state = behaviorData;
|
|
689
|
+
break;
|
|
690
|
+
case 'methods':
|
|
691
|
+
list.forEach(methodsObject => {
|
|
692
|
+
Object.assign(methods, methodsObject);
|
|
693
|
+
});
|
|
694
|
+
Object.keys(methods).forEach(methodName => {
|
|
695
|
+
if (!this[methodName]) {
|
|
696
|
+
const method = methods[methodName];
|
|
697
|
+
this[methodName] = bind(method, this);
|
|
813
698
|
}
|
|
814
699
|
});
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
switch (lifecycleKey) {
|
|
824
|
-
case TaroLifeCycles.DidHide:
|
|
825
|
-
this.didHides.push(lifecycle);
|
|
826
|
-
break;
|
|
827
|
-
case TaroLifeCycles.DidMount:
|
|
828
|
-
this.didMounts.push(lifecycle);
|
|
829
|
-
break;
|
|
830
|
-
case TaroLifeCycles.DidShow:
|
|
831
|
-
this.didShows.push(lifecycle);
|
|
832
|
-
break;
|
|
833
|
-
case TaroLifeCycles.WillMount:
|
|
834
|
-
this.willMounts.push(lifecycle);
|
|
835
|
-
break;
|
|
836
|
-
case TaroLifeCycles.WillUnmount:
|
|
837
|
-
this.willUnmounts.push(lifecycle);
|
|
838
|
-
break;
|
|
839
|
-
}
|
|
840
|
-
}
|
|
700
|
+
break;
|
|
701
|
+
case 'lifetimes':
|
|
702
|
+
list.forEach(lifetimesObject => {
|
|
703
|
+
for (const key in lifetimesObject) {
|
|
704
|
+
this.initLifeCycles(key, lifetimesObject[key]);
|
|
705
|
+
}
|
|
706
|
+
});
|
|
707
|
+
break;
|
|
841
708
|
}
|
|
842
709
|
}
|
|
843
|
-
// mixins 不会覆盖已经设置的生命周期,加入到 this 是为了形如 this.created() 的调用
|
|
844
|
-
if (!isFunction(this[lifecycleName])) {
|
|
845
|
-
this[lifecycleName] = lifecycle;
|
|
846
|
-
}
|
|
847
710
|
}
|
|
848
|
-
}
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
cb = cb.bind(this);
|
|
855
|
-
(router === null || router === void 0 ? void 0 : router[lifecycleName]) && taro.eventCenter.on(router[lifecycleName], cb);
|
|
856
|
-
// unMount 时需要取消事件监听
|
|
857
|
-
this.eventDestroyList.push(function () {
|
|
858
|
-
return taro.eventCenter.off(router[lifecycleName], cb);
|
|
859
|
-
});
|
|
860
|
-
}
|
|
861
|
-
}, {
|
|
862
|
-
key: "executeLifeCycles",
|
|
863
|
-
value: function executeLifeCycles(funcs) {
|
|
864
|
-
for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key6 = 1; _key6 < _len3; _key6++) {
|
|
865
|
-
args[_key6 - 1] = arguments[_key6];
|
|
866
|
-
}
|
|
867
|
-
for (var i = 0; i < funcs.length; i++) {
|
|
868
|
-
var func = funcs[i];
|
|
869
|
-
this.safeExecute.apply(this, [func].concat(args));
|
|
870
|
-
}
|
|
711
|
+
}
|
|
712
|
+
initLifeCycles(lifecycleName, lifecycle) {
|
|
713
|
+
// 不支持的生命周期
|
|
714
|
+
if (nonsupport.has(lifecycleName)) {
|
|
715
|
+
const advise = nonsupport.get(lifecycleName);
|
|
716
|
+
return report(advise);
|
|
871
717
|
}
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
var prop = prevProps === null || prevProps === void 0 ? void 0 : prevProps[key];
|
|
880
|
-
var nextProp = nextProps[key];
|
|
881
|
-
// 小程序是深比较不同之后才 trigger observer
|
|
882
|
-
if (!isEqual(prop, nextProp)) {
|
|
883
|
-
observers.forEach(function (observer) {
|
|
884
|
-
if (typeof observer === 'string') {
|
|
885
|
-
var ob = _this4[observer];
|
|
886
|
-
if (isFunction(ob)) {
|
|
887
|
-
ob.call(_this4, nextProp, prop, key);
|
|
888
|
-
}
|
|
889
|
-
} else if (isFunction(observer)) {
|
|
890
|
-
observer.call(_this4, nextProp, prop, key);
|
|
718
|
+
if (lifecycleName === 'ready') {
|
|
719
|
+
// 如果组件是延时渲染的,页面 onReady 的事件已经 emit 了,因此使用 componentDidMount + nextTick 模拟
|
|
720
|
+
if (this.current.page.onReady.called) {
|
|
721
|
+
this.didMounts.push(function (...args) {
|
|
722
|
+
taro.nextTick(() => {
|
|
723
|
+
if (isFunction(lifecycle)) {
|
|
724
|
+
lifecycle.apply(this, args);
|
|
891
725
|
}
|
|
892
726
|
});
|
|
893
|
-
}
|
|
894
|
-
});
|
|
895
|
-
}
|
|
896
|
-
}, {
|
|
897
|
-
key: "triggerObservers",
|
|
898
|
-
value: function triggerObservers(current, prev) {
|
|
899
|
-
var observers = this.observers;
|
|
900
|
-
if (observers == null) {
|
|
901
|
-
return;
|
|
902
|
-
}
|
|
903
|
-
if (Object.keys(observers).length === 0) {
|
|
904
|
-
return;
|
|
905
|
-
}
|
|
906
|
-
var result = diff(current, prev);
|
|
907
|
-
var resultKeys = Object.keys(result);
|
|
908
|
-
if (resultKeys.length === 0) {
|
|
909
|
-
return;
|
|
910
|
-
}
|
|
911
|
-
for (var observerKey in observers) {
|
|
912
|
-
if (/\*\*/.test(observerKey)) {
|
|
913
|
-
report('数据监听器 observers 不支持使用通配符 **。');
|
|
914
|
-
continue;
|
|
915
|
-
}
|
|
916
|
-
var keys = observerKey.split(',').map(function (k) {
|
|
917
|
-
return k.trim();
|
|
918
727
|
});
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
var key = keys[i];
|
|
922
|
-
for (var j = 0; j < resultKeys.length; j++) {
|
|
923
|
-
var resultKey = resultKeys[j];
|
|
924
|
-
if (resultKey.startsWith(key) || key.startsWith(resultKey) && key.endsWith(']')) {
|
|
925
|
-
isModified = true;
|
|
926
|
-
}
|
|
927
|
-
}
|
|
928
|
-
}
|
|
929
|
-
if (isModified) {
|
|
930
|
-
observers[observerKey].apply(this, keys.map(function (key) {
|
|
931
|
-
return safeGet(current, key);
|
|
932
|
-
}));
|
|
933
|
-
}
|
|
728
|
+
} else {
|
|
729
|
+
this.initLifeCycleListener('ready', lifecycle);
|
|
934
730
|
}
|
|
935
|
-
}
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
731
|
+
} else {
|
|
732
|
+
for (const lifecycleKey in lifecycleMap) {
|
|
733
|
+
const cycleNames = lifecycleMap[lifecycleKey];
|
|
734
|
+
if (cycleNames.indexOf(lifecycleName) !== -1) {
|
|
735
|
+
switch (lifecycleKey) {
|
|
736
|
+
case TaroLifeCycles.DidHide:
|
|
737
|
+
this.didHides.push(lifecycle);
|
|
738
|
+
break;
|
|
739
|
+
case TaroLifeCycles.DidMount:
|
|
740
|
+
this.didMounts.push(lifecycle);
|
|
741
|
+
break;
|
|
742
|
+
case TaroLifeCycles.DidShow:
|
|
743
|
+
this.didShows.push(lifecycle);
|
|
744
|
+
break;
|
|
745
|
+
case TaroLifeCycles.WillMount:
|
|
746
|
+
this.willMounts.push(lifecycle);
|
|
747
|
+
break;
|
|
748
|
+
case TaroLifeCycles.WillUnmount:
|
|
749
|
+
this.willUnmounts.push(lifecycle);
|
|
750
|
+
break;
|
|
751
|
+
}
|
|
947
752
|
}
|
|
948
|
-
});
|
|
949
|
-
}
|
|
950
|
-
}, {
|
|
951
|
-
key: "privateStopNoop",
|
|
952
|
-
value: function privateStopNoop() {
|
|
953
|
-
var e;
|
|
954
|
-
var fn;
|
|
955
|
-
if (arguments.length === 2) {
|
|
956
|
-
fn = arguments.length <= 0 ? undefined : arguments[0];
|
|
957
|
-
e = arguments.length <= 1 ? undefined : arguments[1];
|
|
958
|
-
} else if (arguments.length === 1) {
|
|
959
|
-
e = arguments.length <= 0 ? undefined : arguments[0];
|
|
960
|
-
}
|
|
961
|
-
if (e.type === 'touchmove') {
|
|
962
|
-
report('catchtouchmove 转换后只能停止回调函数的冒泡,不能阻止滚动穿透。如要阻止滚动穿透,可以手动给编译后的 View 组件加上 catchMove 属性');
|
|
963
753
|
}
|
|
964
|
-
e.stopPropagation();
|
|
965
|
-
isFunction(fn) && fn(e);
|
|
966
|
-
}
|
|
967
|
-
// ================ React 生命周期 ================
|
|
968
|
-
}, {
|
|
969
|
-
key: "componentWillMount",
|
|
970
|
-
value: function componentWillMount() {
|
|
971
|
-
this.safeExecute(_get__default["default"](_getPrototypeOf__default["default"](BaseComponent.prototype), "componentWillMount", this));
|
|
972
|
-
this.executeLifeCycles(this.willMounts, this.current.router || {});
|
|
973
|
-
this.triggerObservers(this.data, BaseComponent.defaultProps);
|
|
974
|
-
this.triggerPropertiesObservers(BaseComponent.defaultProps, this.props);
|
|
975
|
-
}
|
|
976
|
-
}, {
|
|
977
|
-
key: "componentDidMount",
|
|
978
|
-
value: function componentDidMount() {
|
|
979
|
-
this.safeExecute(_get__default["default"](_getPrototypeOf__default["default"](BaseComponent.prototype), "componentDidMount", this));
|
|
980
|
-
this.executeLifeCycles(this.didMounts);
|
|
981
|
-
}
|
|
982
|
-
}, {
|
|
983
|
-
key: "componentWillUnmount",
|
|
984
|
-
value: function componentWillUnmount() {
|
|
985
|
-
this.eventDestroyList.forEach(function (fn) {
|
|
986
|
-
return fn();
|
|
987
|
-
});
|
|
988
|
-
this.safeExecute(_get__default["default"](_getPrototypeOf__default["default"](BaseComponent.prototype), "componentWillUnmount", this));
|
|
989
|
-
this.executeLifeCycles(this.willUnmounts);
|
|
990
|
-
}
|
|
991
|
-
}, {
|
|
992
|
-
key: "componentDidHide",
|
|
993
|
-
value: function componentDidHide() {
|
|
994
|
-
this.safeExecute(_get__default["default"](_getPrototypeOf__default["default"](BaseComponent.prototype), "componentDidHide", this));
|
|
995
|
-
this.executeLifeCycles(this.didHides);
|
|
996
754
|
}
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
this.safeExecute(_get__default["default"](_getPrototypeOf__default["default"](BaseComponent.prototype), "componentDidShow", this), this.current.router || {});
|
|
1001
|
-
this.executeLifeCycles(this.didShows, this.current.router || {});
|
|
755
|
+
// mixins 不会覆盖已经设置的生命周期,加入到 this 是为了形如 this.created() 的调用
|
|
756
|
+
if (!isFunction(this[lifecycleName])) {
|
|
757
|
+
this[lifecycleName] = lifecycle;
|
|
1002
758
|
}
|
|
1003
|
-
}
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
759
|
+
}
|
|
760
|
+
initLifeCycleListener(name, cb) {
|
|
761
|
+
// 组件的 ready、show、hide 需要利用页面事件触发
|
|
762
|
+
const {
|
|
763
|
+
router
|
|
764
|
+
} = this.current;
|
|
765
|
+
const lifecycleName = `on${name[0].toUpperCase()}${name.slice(1)}`;
|
|
766
|
+
cb = cb.bind(this);
|
|
767
|
+
(router === null || router === void 0 ? void 0 : router[lifecycleName]) && taro.eventCenter.on(router[lifecycleName], cb);
|
|
768
|
+
// unMount 时需要取消事件监听
|
|
769
|
+
this.eventDestroyList.push(() => taro.eventCenter.off(router[lifecycleName], cb));
|
|
770
|
+
}
|
|
771
|
+
executeLifeCycles(funcs, ...args) {
|
|
772
|
+
for (let i = 0; i < funcs.length; i++) {
|
|
773
|
+
const func = funcs[i];
|
|
774
|
+
this.safeExecute(func, ...args);
|
|
1009
775
|
}
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
776
|
+
}
|
|
777
|
+
triggerPropertiesObservers(prevProps, nextProps) {
|
|
778
|
+
this._observeProps.forEach(({
|
|
779
|
+
name: key,
|
|
780
|
+
observers
|
|
781
|
+
}) => {
|
|
782
|
+
const prop = prevProps === null || prevProps === void 0 ? void 0 : prevProps[key];
|
|
783
|
+
const nextProp = nextProps[key];
|
|
784
|
+
// 小程序是深比较不同之后才 trigger observer
|
|
785
|
+
if (!isEqual(prop, nextProp)) {
|
|
786
|
+
observers.forEach(observer => {
|
|
787
|
+
if (typeof observer === 'string') {
|
|
788
|
+
const ob = this[observer];
|
|
789
|
+
if (isFunction(ob)) {
|
|
790
|
+
ob.call(this, nextProp, prop, key);
|
|
791
|
+
}
|
|
792
|
+
} else if (isFunction(observer)) {
|
|
793
|
+
observer.call(this, nextProp, prop, key);
|
|
794
|
+
}
|
|
795
|
+
});
|
|
796
|
+
}
|
|
797
|
+
});
|
|
798
|
+
}
|
|
799
|
+
triggerObservers(current, prev) {
|
|
800
|
+
const observers = this.observers;
|
|
801
|
+
if (observers == null) {
|
|
802
|
+
return;
|
|
1015
803
|
}
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
get: function get() {
|
|
1019
|
-
return this.current.page.id;
|
|
804
|
+
if (Object.keys(observers).length === 0) {
|
|
805
|
+
return;
|
|
1020
806
|
}
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
return
|
|
807
|
+
const result = diff(current, prev);
|
|
808
|
+
const resultKeys = Object.keys(result);
|
|
809
|
+
if (resultKeys.length === 0) {
|
|
810
|
+
return;
|
|
1025
811
|
}
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
return taro.createMediaQueryObserver();
|
|
1041
|
-
} else {
|
|
1042
|
-
console.error("page \u4E0B\u6CA1\u6709 ".concat(method, " \u65B9\u6CD5"));
|
|
812
|
+
for (const observerKey in observers) {
|
|
813
|
+
if (/\*\*/.test(observerKey)) {
|
|
814
|
+
report('数据监听器 observers 不支持使用通配符 **。');
|
|
815
|
+
continue;
|
|
816
|
+
}
|
|
817
|
+
const keys = observerKey.split(',').map(k => k.trim());
|
|
818
|
+
let isModified = false;
|
|
819
|
+
for (let i = 0; i < keys.length; i++) {
|
|
820
|
+
const key = keys[i];
|
|
821
|
+
for (let j = 0; j < resultKeys.length; j++) {
|
|
822
|
+
const resultKey = resultKeys[j];
|
|
823
|
+
if (resultKey.startsWith(key) || key.startsWith(resultKey) && key.endsWith(']')) {
|
|
824
|
+
isModified = true;
|
|
825
|
+
}
|
|
1043
826
|
}
|
|
1044
|
-
}
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
value: function selectComponent() {
|
|
1049
|
-
report(nonsupport.get('selectComponent'));
|
|
1050
|
-
}
|
|
1051
|
-
}, {
|
|
1052
|
-
key: "selectAllComponents",
|
|
1053
|
-
value: function selectAllComponents() {
|
|
1054
|
-
report(nonsupport.get('selectAllComponents'));
|
|
827
|
+
}
|
|
828
|
+
if (isModified) {
|
|
829
|
+
observers[observerKey].apply(this, keys.map(key => safeGet(current, key)));
|
|
830
|
+
}
|
|
1055
831
|
}
|
|
1056
|
-
}
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
832
|
+
}
|
|
833
|
+
defineProperty(target, key, data) {
|
|
834
|
+
Object.defineProperty(target, key, {
|
|
835
|
+
configurable: true,
|
|
836
|
+
enumerable: true,
|
|
837
|
+
set(value) {
|
|
838
|
+
data[key] = value;
|
|
839
|
+
},
|
|
840
|
+
get() {
|
|
841
|
+
return data[key];
|
|
842
|
+
}
|
|
843
|
+
});
|
|
844
|
+
}
|
|
845
|
+
privateStopNoop(...args) {
|
|
846
|
+
let e;
|
|
847
|
+
let fn;
|
|
848
|
+
if (args.length === 2) {
|
|
849
|
+
fn = args[0];
|
|
850
|
+
e = args[1];
|
|
851
|
+
} else if (args.length === 1) {
|
|
852
|
+
e = args[0];
|
|
1060
853
|
}
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
value: function groupSetData() {
|
|
1064
|
-
report(nonsupport.get('groupSetData'));
|
|
854
|
+
if (e.type === 'touchmove') {
|
|
855
|
+
report('catchtouchmove 转换后只能停止回调函数的冒泡,不能阻止滚动穿透。如要阻止滚动穿透,可以手动给编译后的 View 组件加上 catchMove 属性');
|
|
1065
856
|
}
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
857
|
+
e.stopPropagation();
|
|
858
|
+
isFunction(fn) && fn(e);
|
|
859
|
+
}
|
|
860
|
+
// ================ React 生命周期 ================
|
|
861
|
+
componentWillMount() {
|
|
862
|
+
this.safeExecute(super.componentWillMount);
|
|
863
|
+
this.executeLifeCycles(this.willMounts, this.current.router || {});
|
|
864
|
+
this.triggerObservers(this.data, BaseComponent.defaultProps);
|
|
865
|
+
this.triggerPropertiesObservers(BaseComponent.defaultProps, this.props);
|
|
866
|
+
}
|
|
867
|
+
componentDidMount() {
|
|
868
|
+
this.safeExecute(super.componentDidMount);
|
|
869
|
+
this.executeLifeCycles(this.didMounts);
|
|
870
|
+
}
|
|
871
|
+
componentWillUnmount() {
|
|
872
|
+
this.eventDestroyList.forEach(fn => fn());
|
|
873
|
+
this.safeExecute(super.componentWillUnmount);
|
|
874
|
+
this.executeLifeCycles(this.willUnmounts);
|
|
875
|
+
}
|
|
876
|
+
componentDidHide() {
|
|
877
|
+
this.safeExecute(super.componentDidHide);
|
|
878
|
+
this.executeLifeCycles(this.didHides);
|
|
879
|
+
}
|
|
880
|
+
componentDidShow() {
|
|
881
|
+
this.safeExecute(super.componentDidShow, this.current.router || {});
|
|
882
|
+
this.executeLifeCycles(this.didShows, this.current.router || {});
|
|
883
|
+
}
|
|
884
|
+
componentWillReceiveProps(nextProps) {
|
|
885
|
+
this.triggerObservers(nextProps, this.props);
|
|
886
|
+
this.triggerPropertiesObservers(this.props, nextProps);
|
|
887
|
+
this.safeExecute(super.componentWillReceiveProps);
|
|
888
|
+
}
|
|
889
|
+
// ================ 小程序 App, Page, Component 实例属性与方法 ================
|
|
890
|
+
get is() {
|
|
891
|
+
return this.current.page.is;
|
|
892
|
+
}
|
|
893
|
+
get id() {
|
|
894
|
+
return this.current.page.id;
|
|
895
|
+
}
|
|
896
|
+
get dataset() {
|
|
897
|
+
return this.current.page.dataset;
|
|
898
|
+
}
|
|
899
|
+
componentMethodsProxy(method) {
|
|
900
|
+
return (...args) => {
|
|
901
|
+
const page = this.current.page;
|
|
902
|
+
if (page === null || page === void 0 ? void 0 : page[method]) {
|
|
903
|
+
return page[method](...args);
|
|
904
|
+
} else if (method === 'createSelectorQuery') {
|
|
905
|
+
return taro.createSelectorQuery();
|
|
906
|
+
} else if (method === 'createIntersectionObserver') {
|
|
907
|
+
// @ts-ignore
|
|
908
|
+
return taro.createIntersectionObserver(...args);
|
|
909
|
+
} else if (method === 'createMediaQueryObserver') {
|
|
910
|
+
return taro.createMediaQueryObserver();
|
|
911
|
+
} else {
|
|
912
|
+
console.error(`page 下没有 ${method} 方法`);
|
|
913
|
+
}
|
|
914
|
+
};
|
|
915
|
+
}
|
|
916
|
+
selectComponent() {
|
|
917
|
+
report(nonsupport.get('selectComponent'));
|
|
918
|
+
}
|
|
919
|
+
selectAllComponents() {
|
|
920
|
+
report(nonsupport.get('selectAllComponents'));
|
|
921
|
+
}
|
|
922
|
+
selectOwnerComponent() {
|
|
923
|
+
report(nonsupport.get('selectOwnerComponent'));
|
|
924
|
+
}
|
|
925
|
+
groupSetData() {
|
|
926
|
+
report(nonsupport.get('groupSetData'));
|
|
927
|
+
}
|
|
928
|
+
}
|
|
929
|
+
const props = weappConf.properties;
|
|
1070
930
|
if (props) {
|
|
1071
|
-
for (
|
|
1072
|
-
|
|
931
|
+
for (const propKey in props) {
|
|
932
|
+
const propValue = props[propKey];
|
|
1073
933
|
if (propValue != null && !isFunction(propValue)) {
|
|
1074
934
|
if (propValue.value !== undefined) {
|
|
1075
935
|
// 如果是 null 也赋值到 defaultProps
|
|
1076
|
-
BaseComponent.defaultProps = Object.assign(
|
|
936
|
+
BaseComponent.defaultProps = Object.assign({
|
|
937
|
+
[propKey]: propValue.value
|
|
938
|
+
}, BaseComponent.defaultProps);
|
|
1077
939
|
}
|
|
1078
940
|
}
|
|
1079
941
|
}
|
|
1080
942
|
}
|
|
1081
|
-
|
|
1082
|
-
staticOptions.forEach(
|
|
1083
|
-
|
|
943
|
+
const staticOptions = ['externalClasses', 'relations', 'options'];
|
|
944
|
+
staticOptions.forEach(option => {
|
|
945
|
+
const value = weappConf[option];
|
|
1084
946
|
if (value != null) {
|
|
1085
947
|
BaseComponent[option] = value;
|
|
1086
948
|
}
|