3

Is it possible to create a composable function that would use render function so it can display something?

Example:

import { h } from 'vue'

export function useErrorHandling() {
  return {
    render() {
        return h('div', { class: 'bar', innerHTML: 'world!' })      
    }
  }
}
<script setup>
import { useErrorHandling } from './mouse.js'

 useErrorHandling()
</script>

<template>
 hello
</template>

plaground with above example

BT101
  • 3,666
  • 10
  • 41
  • 90

2 Answers2

5

Yes It is possible to do that you need just store the value returned by the composable in a variable and use it as a component

const err =  useErrorHandling()
//in template 
// <err />

Playground Example

Youness Ait Ali
  • 316
  • 2
  • 6
  • Aha, thanks. It's not possible to show something (for example teleported to body toast) without the component instance? – BT101 Sep 05 '22 at 15:14
  • Yes, it is possible. You need to get an instance of the component and append the toast component to it. You can do that by making a reference to the root component using ref or using getCurrentInstance from the internal API. Here is a [demo](https://cutt.ly/iCzmlqG), but I'm not sure if it's a good practice or not – Youness Ait Ali Sep 05 '22 at 21:52
0

createApp and mount can help you.

function HelloWorld({ fontSize }) {
  return h(
    'div',
    {
      style: {
        color: 'red',
        fontSize,
      },
    },
    'Hello World'
  )
}
const app2 = createApp(HelloWorld, {
  fontSize: '30px',
})
app2.mount('#app-2') // pass selector you want to mount
JackChouMine
  • 947
  • 8
  • 22