@mpxjs/core 2.9.47 → 2.9.50

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mpxjs/core",
3
- "version": "2.9.47",
3
+ "version": "2.9.50",
4
4
  "description": "mpx runtime core",
5
5
  "keywords": [
6
6
  "miniprogram",
@@ -19,7 +19,7 @@
19
19
  ],
20
20
  "main": "src/index.js",
21
21
  "dependencies": {
22
- "@mpxjs/utils": "^2.9.41",
22
+ "@mpxjs/utils": "^2.9.50",
23
23
  "lodash": "^4.1.1",
24
24
  "miniprogram-api-typings": "^3.10.0"
25
25
  },
@@ -81,5 +81,5 @@
81
81
  "url": "https://github.com/didi/mpx/issues"
82
82
  },
83
83
  "sideEffects": false,
84
- "gitHead": "3fe5773884ffeb99732414fe5d2d64b7f76d4c78"
84
+ "gitHead": "d8b89e0ba1f29a16244b247f6c7a8d8197e0d732"
85
85
  }
package/src/core/proxy.js CHANGED
@@ -27,8 +27,7 @@ import {
27
27
  callWithErrorHandling,
28
28
  warn,
29
29
  error,
30
- getEnvObj,
31
- isReact
30
+ getEnvObj
32
31
  } from '@mpxjs/utils'
33
32
  import {
34
33
  BEFORECREATE,
@@ -136,8 +135,10 @@ export default class MpxProxy {
136
135
  }
137
136
 
138
137
  created () {
139
- // 缓存上下文,在 destoryed 阶段删除
140
- contextMap.set(this.uid, this.target)
138
+ if (__mpx_dynamic_runtime__) {
139
+ // 缓存上下文,在 destoryed 阶段删除
140
+ contextMap.set(this.uid, this.target)
141
+ }
141
142
  if (__mpx_mode__ !== 'web') {
142
143
  // web中BEFORECREATE钩子通过vue的beforeCreate钩子单独驱动
143
144
  this.callHook(BEFORECREATE)
@@ -153,7 +154,7 @@ export default class MpxProxy {
153
154
  this.state = CREATED
154
155
  this.callHook(CREATED)
155
156
 
156
- if (__mpx_mode__ !== 'web' && !isReact) {
157
+ if (__mpx_mode__ !== 'web' && __mpx_mode__ !== 'ios' && __mpx_mode__ !== 'android') {
157
158
  this.initRender()
158
159
  }
159
160
 
@@ -197,8 +198,10 @@ export default class MpxProxy {
197
198
  }
198
199
 
199
200
  unmounted () {
200
- // 页面/组件销毁清除上下文的缓存
201
- contextMap.remove(this.uid)
201
+ if (__mpx_dynamic_runtime__) {
202
+ // 页面/组件销毁清除上下文的缓存
203
+ contextMap.remove(this.uid)
204
+ }
202
205
  this.callHook(BEFOREUNMOUNT)
203
206
  this.scope?.stop()
204
207
  if (this.update) this.update.active = false
@@ -239,7 +242,7 @@ export default class MpxProxy {
239
242
  }
240
243
 
241
244
  initProps () {
242
- if (isReact) {
245
+ if (__mpx_mode__ === 'ios' || __mpx_mode__ === 'android') {
243
246
  // react模式下props内部对象透传无需深clone,依赖对象深层的数据响应触发子组件更新
244
247
  this.props = this.target.__getProps()
245
248
  } else {
@@ -650,7 +653,7 @@ export default class MpxProxy {
650
653
  this.forceUpdateAll = true
651
654
  }
652
655
 
653
- if (isReact) {
656
+ if (__mpx_mode__ === 'ios' || __mpx_mode__ === 'android') {
654
657
  // rn中不需要setdata
655
658
  this.forceUpdateData = {}
656
659
  this.forceUpdateAll = false
@@ -74,6 +74,13 @@ export default function install (Vue) {
74
74
  }
75
75
  })
76
76
 
77
+ Vue.prototype.__ensureString = function (val) {
78
+ if (typeof val === 'string') {
79
+ return val
80
+ }
81
+ return JSON.stringify(val) + 'MpxEscape'
82
+ }
83
+
77
84
  Vue.prototype.triggerEvent = function (eventName, eventDetail) {
78
85
  // 输出Web时自定义组件绑定click事件会和web原生事件冲突,组件内部triggerEvent时会导致事件执行两次,将click事件改为_click来规避此问题
79
86
  const escapeEvents = ['click']
@@ -13,16 +13,16 @@ import pageRouteMixin from './pageRouteMixin'
13
13
  import { dynamicRefsMixin, dynamicRenderHelperMixin, dynamicSlotMixin } from '../../dynamic/dynamicRenderMixin.empty'
14
14
  import styleHelperMixin from './styleHelperMixin'
15
15
  import directiveHelperMixin from './directiveHelperMixin'
16
- import { isReact } from '@mpxjs/utils'
17
16
 
18
17
  export default function getBuiltInMixins (options, type) {
19
18
  let bulitInMixins
20
- if (isReact) {
19
+ if (__mpx_mode__ === 'ios' || __mpx_mode__ === 'android') {
21
20
  bulitInMixins = [
22
21
  proxyEventMixin(),
23
22
  directiveHelperMixin(),
24
23
  styleHelperMixin(type),
25
- refsMixin()
24
+ refsMixin(),
25
+ i18nMixin()
26
26
  ]
27
27
  } else if (__mpx_mode__ === 'web') {
28
28
  bulitInMixins = [
@@ -5,14 +5,14 @@ import { getDefaultOptions as getAliDefaultOptions } from './ali/getDefaultOptio
5
5
  import { getDefaultOptions as getSwanDefaultOptions } from './swan/getDefaultOptions'
6
6
  import { getDefaultOptions as getWebDefaultOptions } from './web/getDefaultOptions'
7
7
  import { getDefaultOptions as getReactDefaultOptions } from './react/getDefaultOptions'
8
- import { error, isReact } from '@mpxjs/utils'
8
+ import { error } from '@mpxjs/utils'
9
9
 
10
10
  export default function createFactory (type) {
11
11
  return (options = {}, { isNative, customCtor, customCtorType } = {}) => {
12
12
  options.__nativeRender__ = !!isNative
13
13
  options.__type__ = type
14
14
  let ctor
15
- if (__mpx_mode__ !== 'web' && !isReact) {
15
+ if (__mpx_mode__ !== 'web' && __mpx_mode__ !== 'ios' && __mpx_mode__ !== 'android') {
16
16
  if (customCtor) {
17
17
  ctor = customCtor
18
18
  customCtorType = customCtorType || type
@@ -40,7 +40,7 @@ export default function createFactory (type) {
40
40
  }
41
41
 
42
42
  let getDefaultOptions
43
- if (isReact) {
43
+ if (__mpx_mode__ === 'ios' || __mpx_mode__ === 'android') {
44
44
  getDefaultOptions = getReactDefaultOptions
45
45
  } else if (__mpx_mode__ === 'web') {
46
46
  getDefaultOptions = getWebDefaultOptions
@@ -60,7 +60,7 @@ export default function createFactory (type) {
60
60
  // 将合并后的用户定义的rawOptions传入获取当前应该注入的内建mixins
61
61
  rawOptions.mixins = getBuiltInMixins(rawOptions, type)
62
62
  const defaultOptions = getDefaultOptions({ type, rawOptions, currentInject })
63
- if (__mpx_mode__ === 'web' || isReact) {
63
+ if (__mpx_mode__ === 'web' || __mpx_mode__ === 'ios' || __mpx_mode__ === 'android') {
64
64
  global.__mpxOptionsMap = global.__mpxOptionsMap || {}
65
65
  global.__mpxOptionsMap[currentInject.moduleId] = defaultOptions
66
66
  } else if (ctor) {