Vue3.2のsetup script記法にて、テンプレート参照(Template Refs)で子コンポーネントのメソッドを呼び出したい

Vue3.2から導入されたsetup script記法はとても便利ですが、テンプレート参照(Template Refs)経由で子コンポーネントのメソッドを呼び出す方法が分からなかったので、調べました。

環境

  • Vue 3.2

方法

コンポーネント側で、公開するメソッドをdefineExposeする。

$ cat Parent.vue
<script setup>
const child = ref(null)

const onClick = () => {
  child.log()
}
</script>

<template>
  <div>
    <button type="button" @click="onClick">Log</button>
    <Child ref="child" />
  </div>
</template>


$ cat Child.vue
<script setup>
const log = () => {
  console.log("I am God's child")
}

defineExpose({ log })
</script>

参考