美文网首页
vuex模块化过程中的问题

vuex模块化过程中的问题

作者: 暖年的咆哮 | 来源:发表于2020-12-15 11:49 被阅读0次

    做项目用到vuex,不可避免的需要将store模块化,这样在后期维护,以及开发过程中都要规范不少,但是在模块化过程中,不可避免的会出现命名冲突等问题,所以我们在开发时需要注意以下几点:

    话不多说,直接上代码
    1、如何模块化

    import Vue from 'vue'
    import Vuex from 'vuex' //引入 vuex
    import createPersistedState from 'vuex-persistedstate'   //用来处理vuex刷新状态重置的问题,原理其实也就是使用了sessionStorage或者localStorage
    import modules1 from './modules/modules1'
    import modules2 from './modules/modules2'
    Vue.use(Vuex) //使用 vuex
    
    export default new Vuex.Store({
      modules: {
        modules1,
        modules2
      },
      plugins: [createPersistedState({ storage: window.localStorage })]
    })
    

    2、模块modules1内定义state和mutations

    const state = {
    // 用户昵称和头像
      userInfo: {
        userName: '',
        avatar: ''
      }
    }
    
    const mutations = {
      changeUserInfo(state, params) {
        state.userInfo.userName = params.userName
        state.userInfo.avatar = params.avatar
      }
    }
    
    export default {
      namespaced: true,  //官方给的命名空间设置属性
      state,
      mutations
    }
    

    3、vue文件中使用

    import { mapState, mapMutations } from 'vuex' 
    
    //data或者computed中调用mapState
    ...mapState({
        userInfo: state => state.modules1.userInfo
      })
    //methods中调用mapMutations
    
    //2个参数,第一个是你的模块名,第二个是你模块内的方法,上面的state也是相同的,需要先指到对应模块,才能拿到模块内的值
    ...mapMutations('modules1', [
       'changeUserInfo'
    ]),
    //方法调用
    this.changeUserInfo(userInfo)
    

    4、js文件中调用

    import store from '@/store/index.js'
    //在这里可以直接console一下store,就可以看到store中定义的方法以及state中的变量内容,使用方法也就一目了然了
    //获取state中的值
    store.state.modules1.userInfo
    //使用mutations中的方法
    let obj = {}
    store.commit('modules1/changeUserInfo', obj)
    

    ok,收工!

    相关文章

      网友评论

          本文标题:vuex模块化过程中的问题

          本文链接:https://www.haomeiwen.com/subject/obzigktx.html