How to get vuex state from a javascript file (instead of a vue component)

后端 未结 4 1288
孤街浪徒
孤街浪徒 2021-02-02 09:06

I am working with vuex (2.1.1) and get things working within vue single file components. However to avoid too much cruft in my vue single file component I moved some functions t

4条回答
  •  不思量自难忘°
    2021-02-02 09:56

    It is possible to access the store as an object in an external js file, I have also added a test to demonstrate the changes in the state.

    here is the external js file:

    import { store } from '../store/store'
    
    export function getAuth () {
      return store.state.authorization.AUTH_STATE
    }
    

    The state module:

    import * as NameSpace from '../NameSpace'
    /*
       Import everything in NameSpace.js as an object.
       call that object NameSpace.
       NameSpace exports const strings.
    */
    
    import { ParseService } from '../../Services/parse'
    
    const state = {
      [NameSpace.AUTH_STATE]: {
        auth: {},
        error: null
      }
    }
    
    const getters = {
      [NameSpace.AUTH_GETTER]: state => {
        return state[NameSpace.AUTH_STATE]
      }
    }
    
    const mutations = {
      [NameSpace.AUTH_MUTATION]: (state, payload) => {
        state[NameSpace.AUTH_STATE] = payload
      }
    }
    
    const actions = {
      [NameSpace.ASYNC_AUTH_ACTION]: ({ commit }, payload) => {
        ParseService.login(payload.username, payload.password)
          .then((user) => {
            commit(NameSpace.AUTH_MUTATION, {auth: user, error: null})
          })
          .catch((error) => {
            commit(NameSpace.AUTH_MUTATION, {auth: [], error: error})
          })
      }
    
    export default {
      state,
      getters,
      mutations,
      actions
    }
    

    The store:

    import Vue from 'vue'
    import Vuex from 'vuex'
    import authorization from './modules/authorization'
    
    Vue.use(Vuex)
    
    export const store = new Vuex.Store({
      modules: {         
        authorization    
      }                  
    })                   
    

    So far all I have done is create a js file which exports a function returning the AUTH_STATE property of authorization state variable.

    A component for testing:

    
    
    
    

    On the button click default state is logged on to the console. The action in my case results in an api call, resulting a state change if the username - password combination had a record.

    A success case results in showing the console in authState watch, the imported function can print the changes made to the state.

    Likewise, on a fail case, the watch on authError will show the changes made to the state

提交回复
热议问题