LoginSignup
4
2

More than 5 years have passed since last update.

Quasar Framework + Firebase に、Vuexを導入してみる。

Posted at

QuasarFramework+Firebaseに、Vuexを加えて、ユーザ情報をstoreで管理をする機能を追加します。

前提条件・環境

  • macOS High Sierra 10.13.2
  • npmがinstallされている

参考

Vuexとは?

公式サイトによると、「Vue.js アプリケーションのための 状態管理パターン + ライブラリです。」とのことですが、要は、どのコンポーネントからでもアクセスできる共通のグローバル変数を設定して、双方向バインディングを実現するというイメージに近い気がします。詳しくは公式サイトをご参照くださいませ。
https://vuex.vuejs.org/ja/intro.html

QuasarFramework + Firebaseでログイン認証機能を実装する

以下の記事に従ってログイン認証機能を実装しています。
https://qiita.com/yassyskywalker/items/d74ea3b0834145df5473

Vuexを導入する

Vuexをinstallする

npm install vuex --save

src/storeフォルダを作成 && src/store内にstore.jsファイルを作成する。

store.js
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export const store = new Vuex.Store({
  state: {
  }
})

main.js にstoreをimportする。

main.js
...
import { store } from './store/store.js'
...
new Vue({
  el: '#app',
  router,
  store,
  render: h => h(App)
})

src/store/modulesフォルダを作成 && modules/users.jsファイルを作成

users.js
const state = {
  currentUser: null
}

const getters = {
  currentUser: state => state.currentUser
}

const mutations = {
  userStatus (state, user) {
    if (user) {
      state.currentUser = user.email
    }
    else {
      state.currentUser = null
    }
  }
}

const actions = {
  setUser ({ commit }, user) {
    commit('userStatus', user)
  }
}

export default {
  state,
  getters,
  mutations,
  actions
}

main.jsに、Auth状態が変更になったときに、storeのcurrentUser情報を更新するコードを追記する。

main.js
...
let app
firebase.auth().onAuthStateChanged(function (user) {
  // Auth状態が変更したときに、storeの状態も同時に更新する
  if (user) {
    store.dispatch('setUser', user)
  }
  else {
    store.dispatch('setUser', null)
  }
  Quasar.start(() => {
    if (!app) {
      /* eslint-disable no-new */
      app = new Vue({
        el: '#q-app',
        router,
        store,
        render: h => h(require('./App').default)
      })
    }
  })
})

Hello.vueにcurrentUserが取得できているか確認するコードを追記します。

Hello.vue
...
<q-toolbar-title>
  Quasar App {{ currentUser }}
  <div slot="subtitle">Running on Quasar v{{$q.version}}</div>
</q-toolbar-title>
...
<script>
...
computed: {
...
  currentUser () {
    return this.$store.getters.currentUser
  }
},
...
</script>

スクリーンショット 2018-01-28 1.49.19.png

指定した位置にユーザー情報が表示されていれば成功です!

まとめ

Vuexは、日本語のドキュメントが充実しているおかげもあって、学習コストもそこまで高く無いと思いますので、Vue.jsを使うときはセットで使いたいですね。

4
2
0

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
4
2