[译] Vue 3 迁移策略 —— 事件 API(破坏性改动)

1,216 阅读1分钟

需要调研 vue 2 到 vue 3 的迁移方案,来做内部分享。

我看网上貌似目前只有一人翻译了,翻译了前几章。

但是我着急用,只能自己翻了。译者四级没过,全靠有道和谷歌了。

vue 3 官方文档原文—— events api

事件 API

概览

$on$off$once 实例方法被移除。应用程序实例不再实现事件发射器接口。

2.x 语法

2.x 中,Vue 实例可用于触发通过事件发射器 API($on$off$once)强制连接的处理程序。这用于创建 event hubs,以创建在整个应用程序中使用的全局事件侦听器:

// eventHub.js
const eventHub = new Vue()
export default eventHub
// ChildComponent.vue
import eventHub from './eventHub'

export default {
  mounted() {
    // adding eventHub listener
    eventHub.$on('custom-event', () => {
      console.log('Custom event triggered!')
    })
  },
  beforeDestroy() {
    // removing eventHub listener
    eventHub.$off('custom-event')
  }
}
// ParentComponent.vue
import eventHub from './eventHub'

export default {
  methods: {
    callGlobalCustomEvent() {
      // if ChildComponent is mounted, we will have a message in the console
      eventHub.$emit('custom-event') 
    }
  }
}

3.x 语法

我们从实例中完全删除了 $on$off$once 方法。$emit 仍然是现有API的一部分,因为它用于触发由父组件声明式附加的事件处理程序。

迁移策略

可以使用实现 event hubs 接口的外部库(例如 mitt )来替换现有的 event hubs

在兼容性版本中也可以支持这些方法。