如何使用ts在vue3中的渲染函数中公开组件方法

shu*_*hen 7 typescript vue.js vue-component vue-render-function vuejs3

我想调用父文件中的子组件方法,并且子组件是由渲染函数创建的。下面是我的代码

孩子.ts


export default {
  setup(props) {
    //...

    const getCropper = () => {
      return cropper
    }

    return () =>
      // render function
      h('div', { style: props.containerStyle }, [
      ])
  }
Run Code Online (Sandbox Code Playgroud)

父.ts

<template>
 <child-node ref="child"></child-node>
</template>

<script>
export default defineComponent({
  setup(){
    const child =ref(null)
    
    // call child method
    child.value?.getCropper()


    return { child }
  }

})
</script>
Run Code Online (Sandbox Code Playgroud)

Est*_*ask 8

可以使用 来扩展组件实例,这对于返回值已经是 render 函数的expose情况很有用:setup

type ChildPublicInstance = { getCropper(): void }
  ...
  setup(props: {}, context: SetupContext) {
    ...
    const instance: ChildPublicInstance = { getCropper };
    context.expose(instance);
    return () => ...
  }
Run Code Online (Sandbox Code Playgroud)

暴露的实例expose是类型不安全的,需要手动输入,例如:

const child = ref<ComponentPublicInstance<{}, ChildPublicInstance>>();

child.value?.getCropper()
Run Code Online (Sandbox Code Playgroud)