Vue2数据管理插件vuex使用方法

作用:方便做不同组件的传值

下载:vue add vuex
基本语法:

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {// 声明数据
    // 例如:count: 0
    // 调用方法:
    // $store.state.count
  },
  getters: {//相当于是vuex里的计算属性
    // 例如: count: state => state.count
    // 调用方法:
    // $store.getters.计算属性名
  },
  mutations: {//vuex里放同步方法的地方,也是唯一可以修改state数据的地方
    // 参数1:固定的state,得到的就是当前vuex对象里的state
    // 参数2:只能额外接收一个参数,所以如果要传多个,可以传对象或数组
    // 例如: updateXXX (state, obj) {  state.count = obj.count }
    // 调用方法:
    // $store.commit('方法名')
  },
  actions: {//放异步代码方法的地方
    // 参数1:固定的context,也可以简写为ctx,代表了当前store对象
    //参数2: 只能额外接收一个参数,所以如果要传多个,可以传对象或数组
    // 例如: updateXXX (ctx, obj) { ...异步代码  // ctx.state.count = obj.count }
    // 调用方法:
    // this.$store.dispatch('updateXXX', 参数2)
  },
  modules: {//模块化
  }
})

模块化语法:

//新建文件modules 放:cart.js
// 这里放购物车有关的模块数据
export default {
    //开启命名空间:没有命名空间的时候,如果要调用mutations和actions里的方法,会造成调用不明确
    namespaced: true
    // 在模块化的vuex里,state必须是一个函数
    // 且在函数里return一个对象
    state () {
        return {
            // 数据声明到这个对象里
            cartList: []
        }
    },
    mutations: {
        setCartList (state, list) {
            state.cartList = list
        }
    },
    actions: {
        // 假装发请求
        reqCartList (ctx) {
            setTimeout(() => {
                const list =  [
                    { id: 1, name: '皮鞋', price: 9.9 },
                    { id: 2, name: '凉鞋', price: 7699 },
                    { id: 3, name: '外套', price: 2399 },
                    { id: 4, name: '斜挎包', price: 17900 },
                  ]
                ctx.commit('setCartList', list)
            },500)
        }
    },
    getters: {
         //计算总价
        totalPrice (state) {
            return state.cartList.reduce((sum, v) => sum += v.price, 0)
        }
    }
}

导入模块:

// 导入
import cart from './modules/cart'
​
export default new Vuex.Store({
  // 开启严格模式
  strict: true,
  modules: {
    // 把cart注册成子模块
    cart
  }
})

vuex的简化函数:

  • mapStatemapGetters 写到 computed

  • mapMutationsmapActions写到methods
     

    import { mapState ,mapActions,mapActions,mapMutations} from 'vuex'
    export default {
      name: 'Left',
    ​
      // 使用计算属性简化
      computed: {
        // count () {
        //   return this.$store.state.count
        // },
    ​
        // 你下面这句话,他相当于帮你生成了上面两句计算属性
        ...mapState(['count', 'age']),
    
    
        // reqCartList () {
        //   this.$store.dispatch('reqCartList')
        // }
    ​
        ...mapActions(['reqCartList', 'reqFn'])
      }
    }
    
    
    methods: {
        // reqCartList () {
        //   this.$store.dispatch('reqCartList')
        // }
        //简写:
        ...mapActions(['reqCartList', 'reqFn'])//...mapActions(['方法名'])
        ...mapMutations(['addCount','addWithNum']),//mapMutations(['方法名'])
    }
    ​
    // 后面调用就
    this.方法名() 即可,写到html不用加this

    使用模块化开启命名空间的调用方法:

  • $store.state.模块名.数据名(state)

  • $store.commit('模块名/方法名')(mutations)

  • $store.dispatch('模块名/方法名')(actions)

  • $store.getters['模块名/方法名'] (getter)
    简化方法调用:
    mapState('模块名', { 要改的名字: '名字'})
    mapMutations('模块名',{ 要改的名字:  '名字'})
    mapActions('模块名',{ 要改的名字: '名字'})
    mapGetters('模块名',{要改的名字: '名字'})

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值