Как получить доступ к состоянию в JS-файле VUEX - PullRequest
0 голосов
/ 14 октября 2018

Я хотел бы получить доступ к свойству state currentUser из vuex в user.js, чтобы использовать его в auth.js, но оно не будет работать, если я напишу: store.state.currentUser.uid === ...

И я получаю эту ошибку:

Невозможно прочитать свойство 'состояние' из неопределенного.

Чего не хватает в коде?

дерево:

src
 store
   user
    |>user.js
    |>mutations.js
   index.js
 auth.js

user.js:

 const state = {
   profile: {},
   loggedIn: false,
   currentUser: null,
   userProfile: {}
 }

 export default {
   namespaced: true,
   state
 }

auth.js:

import store from './store'
const fb = require('./firebaseConfig.js')

fb.auth.onAuthStateChanged(user => {
 if (user) {
  fb.postsCollection.orderBy('createdOn', 'desc').onSnapshot(querySnapshot => {

  let createdByCurrentUser
  if (querySnapshot.docs.length) {
    createdByCurrentUser = store.state.currentUser.uid === 
      querySnapshot.docChanges()[0].doc.data().userId ? 'Yes' : 'No'
    console.log(createdByCurrentUser)
   }
 })
 }
})

index.js

import Vue from 'vue'
import Vuex from 'vuex'
import user from '@/store/user'

Vue.use(Vuex)

const store = new Vuex.Store({
 state: {
   awesome: true
 },
 modules: {
  user
 }
})

export default store

Errors

1 Ответ

0 голосов
/ 14 октября 2018

Вам нужно использовать getters, посмотрите в документ

getters.js

export default {
  currentUser
}

function currentUser({ currentUser }) {
  return currentUser;
}

user.js

import getters from './getters'

export default {
  namespaced: true,
  state: {
    profile: {},
    loggedIn: false,
    currentUser: null,
    userProfile: {}
  },
  getters
}

auth.js

import store from './store';

const currentUser = store.getters['user/currentUser'];

Поскольку вы используете пространство имен модуля, вы должны использовать его имя в качестве префикса для доступа к функции получателя

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...