Skip to content

Setup Context API(setup 上下文)

setup(props, ctx) 的字段语义来自 SetupContext 类型;本页重点列出可直接导入调用的公开 API。

ctx 常见字段(类型定义语义):

  • ctx.runtime:当前 RuntimeInstance
  • ctx.instance:原生小程序实例
  • ctx.emit:事件派发函数

实例与上下文访问 API

getCurrentInstance()

  • 用途:获取当前运行时实例。
  • 源码:runtime/hooks.ts

getCurrentSetupContext()

  • 用途:获取当前 setup context。
  • 源码:runtime/hooks.ts

依赖注入 API

provide()

  • 用途:在当前组件树提供依赖。
  • 源码:runtime/provide.ts

inject()

  • 用途:从上层读取依赖。
  • 源码:runtime/provide.ts

Setup 兼容工具 API

useNativeInstance()

  • 用途:获取当前 setup 对应的原生实例。
  • 源码:runtime/vueCompat.ts

useBindModel()

  • 用途:创建绑定 payload(value + onXxx)辅助函数。
  • 源码:runtime/vueCompat.ts

示例

vue
<script setup lang="ts">
import { getCurrentSetupContext, provide, ref, useBindModel, useNativeInstance } from 'wevu'

const visible = ref(false)
const model = useBindModel({
  prop: 'modelValue',
  event: 'update:modelValue',
})

provide('featureFlag', 'ctx-instance-demo')

function open() {
  const ctx = getCurrentSetupContext()
  const instance = useNativeInstance()
  visible.value = true
  model.setValue?.(true)
  ctx?.emit('open', { ok: true })
  instance.triggerEvent?.('opened', { ts: Date.now() })
}
</script>

<template>
  <view id="target" @tap="open">
    open: {{ visible }}
  </view>
</template>
vue
<script setup>
import { getCurrentSetupContext, provide, ref, useBindModel, useNativeInstance } from 'wevu'

const visible = ref(false)
const model = useBindModel({
  prop: 'modelValue',
  event: 'update:modelValue',
})

provide('featureFlag', 'ctx-instance-demo')

function open() {
  const ctx = getCurrentSetupContext()
  const instance = useNativeInstance()
  visible.value = true
  model.setValue?.(true)
  ctx?.emit('open', { ok: true })
  instance.triggerEvent?.('opened', { ts: Date.now() })
}
</script>

<template>
  <view id="target" @tap="open">
    open: {{ visible }}
  </view>
</template>

Released under the MIT License.