Estoy usando la API de composición de Vue con Vue2.
Me encontré con un problema cuando traté de llamar a un método de un componente con una función de representación de su padre.
Sin la función de renderizado, está bien.
PlantillaComponente.vue
<template> ... </template> <script lang="ts"> import { defineComponent } from '@vue/composition-api' export default defineComponent({ setup (props, context) { const doSomething = () => { console.log('doSomething') } return { // publish doSomething method. doSomething } } }) </script>Entonces, el componente principal puede llamar al método de TemplateComponent de esta manera.
TopPage.vue
<template> <TemplateComponent ref="componentRef" /> </template> <script lang="ts"> import { defineComponent, ref, onMounted } from '@vue/composition-api' import TemplateComponent from '@/components/TemplateComponent.vue' export default defineComponent({ components: { TemplateComponent }, setup (props, context) { const componentRef = ref() onMounted(() => { componentRef.value.doSomething() }) } }) </script>Con la función de renderizado, no puedo encontrar la forma de llamar al método.
RenderComponent.vue
<script lang="ts"> import { defineComponent, h } from '@vue/composition-api' export default defineComponent({ components: { TemplateComponent }, setup (props, context) { const doSomething = () => { console.log('doSomething') } // setup method should return render function. return () => h('div', 'Hello world!!') } }) </script>Cuando declaramos la función de procesamiento con la API de composición, debemos devolver la función de procesamiento en el método de configuración. https://v3.vuejs.org/guide/composition-api-setup.html#usage-with-render-functions
En este caso, no entiendo cómo publicar el método doSomething.
¿Hay alguna manera de resolver este problema?
El método de contexto de expose existe para combinar la función de representación y los métodos de instancia pública en setup :
context.expose({ doSomething }) return () => ...