Nuxt2からNuxt3へのバージョンアップ時のnuxtApp.$onとnuxtApp.$offの変更【備忘録】
今回はNuxt2からNuxt3へのバージョンアップ時にNuxt2で使っていたnuxtApp.$onとnuxtApp.$offはどう変更していけば良いのかについてご紹介していきます。
個人の備忘録の意味合いが強いです。
バージョンアップ後のNuxt.jsのバージョンは3.11.2となります。
Nuxt2からNuxt3へのバージョンアップ時のnuxtApp.$onとnuxtApp.$offの変更【備忘録】
Nuxt2では$nuxt.emit()でグローバルなVueオブジェクトに対しイベントを発火し、$nuxt.on()でイベントハンドラを登録し、$nuxt.off()で登録したイベントハンドラを解除するという方法があると思います。
・parent.vue
1 2 3 4 5 6 7 8 9 10 |
<script> export default { methods: { test() { this.$nuxt.$emit('updateStatus', currentStatus) }, } } } </script> |
・child.vue
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<script> export default { mounted() { setTimeout(async () => { this.$nuxt.$on('updateStatus', this.setStatus) }, beforeDestroy() { this.$nuxt.$off('updateStatus') }, methods: { setStatus(status) { this.status = status } } } </script> |
これをこのままNuxt3にバージョンアップしてしまうと、Nuxt3では$nuxt.on()と$nuxt.off()に対応していないため動きません。
やり方としては、$nuxt.on()や$nuxt.off()の代わりにnuxtApp.hookやnuxtApp.provideを使いましょう。
・child.vue(変更後)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<script> import { useNuxtApp } from '#app'; const nuxtApp = useNuxtApp(); export default { mounted() { setTimeout(async () => { nuxtApp.provide('updateStatus', this.setStatus) }, beforeDestroy() { nuxtApp.provide('updateStatus', null) }, methods: { setStatus(status) { this.status = status } } } </script> |
終わりに
今回はNuxt2からNuxt3へのバージョンアップ時にNuxt2で使っていたnuxtApp.$onとnuxtApp.$offはどう変更していけば良いのかについてご紹介いたしました。
ディスカッション
コメント一覧
まだ、コメントがありません