重新捋一捋Vuex

主要区别: dispatch VS commit

dispatch:含有异步操作,数据提交至 actions

写法示例:
this$.store.dispatch('SETNAV', res.data);

commit:同步操作,数据提交至 mutations

写法示例:
this$.store.commit('setNav', res.data);

重新捋一捋vuex

/*
 * @Author: sheep669
 * @Description: vuex状态管理器
 * @Date: 2022-06-26 21:46:01
 */
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  //存储变量的地方
  state: {
    nav: [],
  },
  //获取变量的地方
  getters: {
    navData: state => state.nav
  },
  //定义操作数据的方法 
  mutations: {
    setNav(state, data) {
      state.nav = data
    }
  },
  // 执行操作数据方法的地方
  actions: {
    SETNAV({ commit }, data) {
      commit('setNav', data)
    }
  },
  modules: {}
})

获取vuex数据 写在computed中

import {mapState, mapGetters} from 'vuex'
export default {
data () {
return {
}
},
computed: {
...mapState(['nav']),
...mapGetters(['navData'])
},

操作数据 写在methods中

methods: {
...mapMutations(['setNav']), //调用mutations中方法的第一种方式
this.setNav()
}

···等价···

methods: {
this.$store.commit('setNav') //调用mutations中方法的第二种方式
}

含模块 Modules

操作数据

/*
 * @Author: sheep669
 * @Description: 登录状态模块
 * @Date: 2022-07-20 22:16:48
 */
export default {
    namespaced: true,
    state: {
        userinfo: {
            user: '',
            token: ''
        }
    },
    getters: {
       allInfo: state => state.userinfo
    },
    mutations: {
        //设置用户信息
        setUser(state, data) {
            state.userinfo = data;
        },
    },
    actions: {}
}
...mapMutations("loginModule", ["setUser"]),

获取数据

import { mapState , mapGetters } from "vuex";

computed: {
   ...mapState("loginModule", ["userinfo"]),
   ...mapGetters("loginModule",["allInfo"])
},

总结

允许没有getters,使用state获取数据 但不建议

允许没有actions,使用mutations操作数据 但不建议

获取数据

state     ===>...mapState([])
getters   ===>...mapGetters([])

操作数据

mutations
    |
    v
    V
...mapMutations([])
or
this$.store.commit('XXX', res.data);
actions ===>this$.store.dispatch('XXX', res.data);
全部评论
先学会使用,再去了清原理
点赞
送花
回复
分享
发布于 2022-07-23 17:10

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务