Javascript Vue3在替换时从动态创建的子组件中侦听事件

Javascript Vue3在替换时从动态创建的子组件中侦听事件,javascript,vue.js,vue-component,vuejs3,Javascript,Vue.js,Vue Component,Vuejs3,我正在动态创建一个Vue组件,我想监听它发出的事件。我知道您可以在标记中使用@eventName,但我正在使用createApp创建组件 const div = document.createElement('div'); this.$refs.login.appendChild(div); let props = { /** some props **/ }; createApp(Component, props,).mount(div); 这就是我如何创建

我正在动态创建一个Vue组件,我想监听它发出的事件。我知道您可以在标记中使用
@eventName
,但我正在使用
createApp
创建组件

  const div = document.createElement('div');
  this.$refs.login.appendChild(div);

  let props = {
     /** some props **/
  };

  createApp(Component, props,).mount(div);
这就是我如何创建
组件的方法。此答案适用于我的问题,但适用于Vue2,并且已在Vue3中删除了
$on

如何使用Vue3实现这一点?

您可以使用添加事件处理程序。
h
的第二个参数是一个对象,其键以“
上的“
”开头被视为事件处理程序。例如,要为
单击
事件和名为
我的事件
的事件添加处理程序,请执行以下操作:

从“vue”导入{h}
常数comp=h(组件{
onClick:e=>console.log('click',e),
onMyEvent:e=>console.log('my-event',e),
})
createApp(comp,props).挂载(div)

如果您的项目支持,则等效项为:

const comp = <Component onClick={e => console.log('click', e)}
                        onMyEvent={e => console.log('my-event', e)} />
createApp(comp, props).mount(div)
const comp=console.log('click',e)}
onMyEvent={e=>console.log('my-event',e)}/>
createApp(comp,props).挂载(div)

我能想到的一件事是将回调作为道具传递,然后在子组件中执行,但这似乎有点混乱。