1
1

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 5 years have passed since last update.

[nuxt.js その5] storeの実装

Last updated at Posted at 2019-07-17

nuxtでstoreを実装

[公式] ストアについて

・storeディレクトリにファイルがある場合は自動でVuexを使用する準備をしてくれるよ!
・ストアには2つのモードが存在するよ!
・クラシックは廃止予定だからモジュールモードを使うほうがいいよ!
・stateの値はfunction形式で定義してあげないと、異なるユーザ間で予期せぬ情報共有が起きることがあるよ!

とのことです。

公式ページを見て気になったのはgettersとactionsが定義されておらず、以下のような構成となっていたことでした。
alt

前実装したときは以下の構成でした。
alt

モジュールモードになって簡素化されたのか? とも考えましたが、どうもシンプルなら上の構成でもいいけど複雑化してくると困ることがでてくるから下の構成のほうがいいよ ということのようです。Vuexのページ

今回はfirebaseで取得したユーザ情報を保持しておきたいので以下のように作成しました。

~/store/auth.js
// stateはfunction形式で記述しないと複数人で同じ値になってしまう場合がある
export const state = () => ({
  email: {},
  fireid: {}
})

export const getters = {
  email: state => {
    return state.email
  },
  fireid: state => {
    return state.fireid
  }
}

export const mutations = {
  setEmail (state, value) {
    state.email = value
  },
  setLogOut (state) {
    state.email = ''
  },
  setFireID (state, value) {
    state.fireid = value
  }
}

export const actions = {
  setEmail ({commit}, value) {
    commit('setEmail', value)
  },
  setLogOut ({commit}) {
    commit('setLogOut')
  },
  setFireID ({commit}, value) {
    commit('setFireID', value)
  }
}

ストアのゲッタを呼ぶ場合は以下

<router-link to="/user/login" v-if="this.$store.getters['auth/email'] == ''" class="toolbar-font">ログイン</router-link>

ストアの値を書き換える場合は以下
(ログインに成功してstateの値をaction経由で更新)

pages/login.vue
<template>
  <login-form v-on:LoginFormEvent="LoginEvent"></login-form>
</template>
<script>
import LoginForm from '../../components/LoginForm.vue'
export default {
  components: {
    LoginForm
  },
  methods: {
    LoginEvent (resultCode, data) {
      if (resultCode < 0) {
        console.log("ログインに失敗しました")
        this.$router.push({path: '/user/login'})
      }
      // storeにログイン情報をセット
      console.log(resultCode, data)
      this.$store.dispatch('auth/setEmail', data.user.email)
      this.$store.dispatch('auth/setFireID', data.user.uid)
      
      // rootページに遷移 
      this.$router.push({path: '/'})
    }
  }
}
</script>

基本はこんなとこかな

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?