Skip to content

全局 API ​

全局对象 Mpx ​

@mpxjs/core 默认导出 mpx 全局实例对象,通过该实例对象我们可以访问部分应用实例 API

mixin ​

全局注入mixin方法接收两个参数:mpx.mixin(mixins, options)

  • 第一个参数是要混入的mixins,接收类型 MixinObject|MixinObject[]
  • 第二个参数是为全局混入配置,形如{types:string|string[], stage:number},其中types用于控制mixin注入的范围,可选值有'app'|'page'|'component';stage用于控制注入mixin的插入顺序,当stage为负数时,注入的mixin会被插入到构造函数配置中的options.mixins之前,数值越小约靠前,反之当stage为正数时,注入的mixin会被插入到options.mixins之后,数值越大越靠后。

所有mixin中生命周期的执行均先于构造函数配置中直接声明的生命周期,mixin之间的执行顺序则遵从于其在options.mixins数组中的顺序

options的默认值为{types: ['app','page','component'], stage: -1},不传stage时,全局注入mixin的声明周期默认在options.mixins之前执行

js
import mpx from '@mpxjs/core'
// 只在page中混入
mpx.mixin({
  methods: {
    getData: function(){}
  }
}, {
  types:'page'
})

// 默认混入,在app|page|component中都会混入
mpx.mixin([
  {
    methods: {
      getData: function(){}
    }
  },
  {
    methods: {
      setData: function(){}
    }
  }
])

// 只在component中混入,且执行顺序在options.mixins之后
mpx.mixin({
  attached() {
    console.log('com attached')
  }
}, {
  types: 'component',
  stage: 100
})

injectMixins ​

该方法是 mpx.mixin 方法的别名,mpx.injectMixins({}) 等同于 mpx.mixin({})

observable ​

ts
function observable(options: object): Mpx

用于创建响应式数据。

js
import mpx from '@mpxjs/core'
// 直接通过 mpx 对象访问
const b = mpx.observable(object)
  • 注意: Mpx 2.8 版本后该 API 等同于 reactive,同时不再支持具名导出方式,建议直接使用 reactive 替代,请点击查看。

set ​

用于对一个响应式对象新增属性,会触发订阅者更新操作。查看详情

delete ​

ts
function delete(target: Object, key: string | number): void

用于对一个响应式对象删除属性,会触发订阅者更新操作

js
import mpx, { reactive } from '@mpxjs/core'
const person = reactive({name: 1})
mpx.delete(person, 'age')
  • 注意:mpx.delete 也可以使用具名导出的 del。查看详情

use ​

用于安装外部扩展, 支持多参数 方法接收两个参数:mpx.use(plugin, options)

  • 第一个参数是要安装的外部扩展
  • 第二个参数是对象,如果第二个参数是一个包含(prefix or postfix)的option, 那么将会对插件扩展的属性添加前缀或后缀
js
import mpx from '@mpxjs/core'
import test from './test'
mpx.use(test)
mpx.use(test, {prefix: 'mpx'}, 'otherparams')

插件成功安装后,Mpx 会将插件对象或函数的 __installed 属性设置为 true,外部代码可以通过该标记判断插件是否已经安装。Mpx 内部仍使用独立的插件列表避免重复安装。

watch ​

watch 可以通过全局实例访问,也可以使用具名导出的方式,二者逻辑相同,我们推荐使用具名导出的方式。查看详情

createApp ​

注册一个小程序,接受一个 Object 类型的参数

js
import {createApp} from '@mpxjs/core'

createApp({
  onLaunch () {
    console.log('Launch')
  },
  onShow () {
    console.log('Page show')
  },
  //全局变量 可通过getApp()访问
  globalDataA: 'I am global dataA',
  globalDataB: 'I am global dataB'
})
// 或者
createApp(options)

createPage ​

类微信小程序(微信、百度、头条等)内部使用Component的方式创建页面,所以除了支持页面的生命周期之外还同时支持组件的一切特性。当使用 Component 创建页面时,页面生命周期需要写在 methods 内部(微信小程序原生规则),mpx 进行了统一封装转换,页面生命周期都写在最外层即可

ts
function createPage(options: object, config?: object): void
  • options:

    具体形式除了 computed、watch 这类 Mpx 扩展特性之外,其他的属性都参照原生小程序的官方文档即可。

  • config:

    如果希望标识一个组件是最纯粹的原生组件,不用数据响应等能力,可通过 config.isNative 传 true 声明。 如果有需要复写/改写最终调用的创建页面的构造器,可以通过 config 对象的 customCtor 提供。

    • 注意: mpx本身是用 component 来创建页面的,如果传page可能在初始化时候生命周期不正常导致取props有一点问题
js
import {createPage} from '@mpxjs/core'

createPage({
  data: {test: 1},
  computed: {
    test2 () {
      return this.test + 1
    }
  },
  watch: {
    test (val, old) {
      console.log(val, old)
    }
  },
  onShow () {
    this.test++
  }
})

createComponent ​

创建自定义组件,接受两个Object类型的参数。

ts
function createComponent(options: object, config?: object): void
js
import {createComponent} from '@mpxjs/core'

createComponent({
  properties: {
    prop: {
      type: Number,
      value: 10
    }
  },
  data: {test: 1},
  computed: {
    test2 () {
      return this.test + this.prop
    }
  },
  watch: {
    test (val, old) {
      console.log(val, old)
    },
    prop: {
      handler (val, old) {
        console.log(val, old)
      },
      immediate: true // 是否首次执行一次
    }
  }
})

nextTick ​

ts
function nextTick(callback: Function): void

当我们在 Mpx 中更改响应性状态时,最终页面的更新并不是同步立即生效的,而是由 Mpx 将它们缓存在一个队列中, 等到下一个 tick 一起执行, 从而保证了组件/页面无论发生多少状态改变,都仅执行一次更新,从而减少 setData 调用次数。

nextTick() 可以在状态改变后立即调用,可以传递一个函数作为参数,在等待页面/组件更新完成后,函数参数会触发执行。

js
     import {createComponent, nextTick, ref} from '@mpxjs/core'
     createComponent({
       setup (props, context) {
         const showChild = ref(false)
         // DOM 还没有更新
         setTimeOut(() => {
            showChild.value = true
         }, 2000)
         nextTick(function() {
           context.refs['child'].showToast()
         })
         return {
           showChild
         }
       }
     })

toPureObject ​

ts
function toPureObject(options: object): object

业务拿到的数据可能是响应式数据实例(包含了些其他属性),使用toPureObject方法可以将响应式的数据转化成纯 js 对象。

js
import {toPureObject} from '@mpxjs/core'
const pureObject = toPureObject(object)

getMixin ​

专为ts项目提供的反向推导辅助方法,该函数接收类型为 Object ,会将传入的嵌套mixins对象拉平成一个扁平的mixin对象

js
import { createComponent, getMixin} from '@mpxjs/core'
// 使用mixins,需要对每一个mixin子项进行getMixin辅助函数包裹,支持嵌套mixin
const mixin = getMixin({
  mixins: [getMixin({
    data: {
      value1: 2
    },
    lifetimes: {
      attached () {
        console.log(this.value1, 'attached')
      }
    },
    mixins: [getMixin({
      data: {
        value2: 6
      },
      created () {
        console.log(this.value1 + this.value2 + this.outsideVal)
      }
    })]
  })]
})
/*
mixin值
{
  data: {value2: 6, value1: 2},
  created: ƒ created(),
  attached: ƒ attached()
}
*/
createComponent({
  data: {
    outsideVal: 20
  },
  mixins: [mixin]
})

/*
以上执行输出:
28
2 "attached"
*/

implement ​

ts
function implement(name: string, options: object): object
  • {Object} options
    • {Array} modes:需要取消的平台
    • {Boolean} remove:是否将此能力直接移除
    • {Function} processor:设置成功的回调函数

以微信为 base 将代码转换输出到其他平台时(如支付宝、web 平台等),会存在一些无法进行模拟的跨平台差异,会在运行时进行检测并报错指出,例如微信转支付宝时使用 moved 生命周期等。使用implement方法可以取消这种报错。您可以使用 mixin 自行实现跨平台差异,然后使用 implement 取消报错。

Web 输出中,以下选项和生命周期支持通过 implement 登记适配:

声明位置登记名业务需实现的适配
Page / Component 页面onShareAppMessage、onShareTimeline分享入口及分享信息处理
Page / Component 页面onAddToFavorites收藏入口及收藏信息处理
Page / Component 页面onSaveExitState状态保存、过期处理和恢复
Page / Component 页面onRouteDone路由过渡动画完成通知
ApponThemeChange主题变化通知
Component / Behaviormoved、error节点移动通知、组件方法错误处理
Component / BehaviordefinitionFilter定义预处理及过滤器调用链
Componentexport组件查询时的自定义返回值

在 App、页面或组件构造前登记,并指定 modes: ['web']。未登记的上述声明会被移除,并在开发环境报错提示;登记后默认保留,设置 remove: true 则移除。implement 不会自动实现能力或触发回调,实际适配仍需由业务提供。

登记 export 不会启用微信内置的 wx://component-export behavior。

RN 输出中,以下声明同样支持登记后保留、remove: true 移除;未登记时会被移除,并在开发环境报错提示。登记时按目标平台指定 modes: ['ios', 'android', 'harmony'],实际能力与回调触发仍由业务适配层提供:

声明位置登记名业务需实现的适配
Page / Component 页面onShareTimeline、onAddToFavorites分享到朋友圈、收藏入口及返回信息处理
Page / Component 页面onSaveExitState、onRouteDone退出状态保存与恢复、路由动画完成通知
Page / Component 页面onPullDownRefresh、onReachBottom、onPageScroll通过 scroll-view 等实现页面滚动事件
Page / Component 页面onTabItemTap自定义 tab 点击通知
ApponThemeChange、onPageNotFound主题变化、页面不存在通知
Component / Behaviormoved、error、definitionFilter节点移动、组件方法错误处理、定义预处理
Componentexport组件查询时的自定义返回值

RN 的 onShareAppMessage 已有 open-type="share" 与 rnConfig.openTypeHandler.onShareAppMessage 桥接,无需额外通过 implement 登记。

js
import {implement} from '@mpxjs/core'

if (__mpx_mode__ === 'web') {
  const processor = () => {
  }
  implement('onShareAppMessage', {
    modes: ['web'], // 需要取消的平台,可配置多个
    remove: true, // 是否将此能力直接移除
    processor // 设置成功的回调函数
  })
}

内建生命周期变量 ​

Mpx 在运行时自身有着一套内建生命周期,当开发者想使用内建生命周期时,可以通过内建生命周期变量进行对应生命周期的注册, 需要注意的是,这部分内建生命周期变量只能用于选项式 API 中。

BEFORECREATE ​

string

在组件实例刚刚被创建时执行,在实例初始化之后、进行数据侦听和 data 初始化之前同步调用,注意此时不能调用 setData。

js
import {createComponent, BEFORECREATE} from "@mpxjs/core"

createComponent({
  [BEFORECREATE]() {
      console.log('beforecreate trigger')
  }
})

CREATED ​

string

在组件实例刚刚被创建时执行。在这一步中,实例已完成对选项的处理,意味着以下内容已被配置完毕:数据侦听、计算属性、事件/侦听器的回调函数。 然而,挂载阶段还没开始,注意此时不能调用 setData。

js
import {createComponent, CREATED} from "@mpxjs/core"

createComponent({
  [CREATED]() {
      console.log('beforecreate trigger')
  }
})

BEFOREMOUNT ​

选项式 API 中使用,作用同onBeforeMount

MOUNTED ​

选项式 API 中使用,作用同onMounted

BEFOREUPDATE ​

选项式 API 中使用,作用同onBeforeUpdate

UPDATED ​

选项式 API 中使用,作用同onUpdated

SERVERPREFETCH ​

选项式 API 中使用,作用同onServerPrefetch

BEFOREUNMOUNT ​

选项式 API 中使用,作用同onBeforeUnmount

UNMOUNTED ​

选项式 API 中使用,作用同onUnmounted

ONLOAD ​

选项式 API 中使用,作用同onLoad

ONSHOW ​

选项式 API 中使用,作用同onShow

ONHIDE ​

选项式 API 中使用,作用同onHide

ONRESIZE ​

选项式 API 中使用,作用同onResize

响应式 API ​

详情请移步

组合式 API ​

详情请移步

store API ​

详情请移步