56
41

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Nuxt.js】 inject is 何?

Last updated at Posted at 2020-01-14

TL;DR.

  • injectを利用すると関数を共通化することができる
  • 関数はthis.$hogeで呼び出すことができる

injectを使用した処理の例

ページに'hoge'を返す関数を作ってみる

plugins/hoge.js
const returnHoge = () => {
  return 'hoge'
}

export default(context, inject) {
  inject('hoge', returnHoge)
}

これをnuxt.config.jsに設定する

nuxt.config.js

plugins: [
  { src: '@/plugins/hoge', ssr: false }
]

このようにするとthis.$hogeでVueインスタンスで関数を実行することができる

引数を渡したい場合や、関数名を代替したい場合はこのようにする

const calcNumber = (num) => {
  return 3 * num
}

export default(context, inject) {
  inject('calc', { get: calcNumber })
}

これでthis.$calc.get(4)を実行すると12が返ってくる

コンポーネントから呼び出す場合

asyncDataやfetchで使用したい場合はこのように呼び出す

pages/index.vue
export default {
  asyncData(context) {
    context.app.$hoge()
  }
}

injectを使用する利点

  • 確定した処理の共通化が可能
    • 関数を呼び出して必ず実行される処理や分岐に対しては有効
    • ex. 取得処理が成功したら値を返し、失敗したらエラーの処理を実行するなど
  • いちいちページでimportしなくていい
    • これに関しては何を呼び出しているかが明示的にわかりにくくなるので、良し悪しがある
    • 共通化したい処理の中でも関数の実態を把握できるような関数名や共通認識があるものであれば良いが、そうでなければページに残したいところ。。
    • axiosやfirebaseのget, delete、日付処理など、誰が見てもわかり切っているものなら便利そう
  • Vuexストア内でも同様にthis.$で関数を呼ぶことができる
  • 同様の方法にmixinを使用して関数をグローバルに実行する方法があるが、injectの場合はasyncDatafetch内でも共通の関数を利用することができる

参照

Nuxt.js 統合された注入

56
41
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
56
41

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?