十分钟入门使用Vuex

1.Vuex的应用场景

如果用props传值的方式应用在多组件的项目中是一件繁杂且不利于维护管理的方式,很显然这并不是我们想要的组件化的开发体验,因此Vuex就是为了解决这一问题的出现

2.项目中引入Vuex

npm install vuex --save

  • 安装完Vuex后在项目src目录新建一个store文件夹且存放Vuex的状态管理
//引入vue和Vuex
import Vue from 'vue'
import Vuex from 'vuex'

//引入之后,对vuex进行引用
Vue.use(Vuex)
  • main.js中引入且注册store仓库
//引入仓库
import store from '@/store'

new Vue({
  render: h => h(App),
  //注册路由
  router,
  //注册仓库:组件实例的身上会多个$store的属性
  store
}).$mount('#app')

3.Vuex核心概念

  • state是用来定义状态,通俗易懂的讲就是将state看作是store的data,用于保存所有组建的公共数据
    在这里插入图片描述

组件中获取state仓库中的数据:

data(){
	return{
		userList: this.$store.state.userList//获取store中state的数据
	}
}
  • getters是用来对状态进行过滤的,可以理解为store的computed属性,getters的返回值会根据它的依赖被缓存起来且只有当它的依赖值发生了改变才会被重新计算

组件中使用:

data(){
	return{
		userList: this.$store.getters.userListModel
	}
}
  • mutaions是一个同步状态管理器,可以理解为store的methods,且有两个参数(第一个参数是state,第二个参数是payload,也就是自定义的参数)

注:在组件中调用使用mutaions中的回调函数只能使用$store.commit(type, payload)

methods:{
	userListFun(){
		this.$store.commit('mutaions方法名',自定义参数)
	}
}
  • actions是一个异步状态管理器,actions有点类似于mutaions,但是actions可以包含异步操作,mutaions绝对不允许出现异步

在组件中分发actions

methods:{
	userListFun(){
		this.$store.dispatch('minusPriceAsync', 5)
	}
}

4.测试store的demo

const store = new Vuex.Store({
  state:{
    products: [
      {name: '鼠标', price: 20},
      {name: '键盘', price: 40},
      {name: '耳机', price: 60},
      {name: '显示屏', price: 80}
    ]
  },
  getters:{
    saleProducts: (state) => {
      let saleProducts = state.products.map( product => {
        return {
          name: product.name,
          price: product.price / 2
        }
      })
      return saleProducts;
    }
  },
  mutations:{
    minusPrice (state, payload ) {
      let newPrice = state.products.forEach( product => {
        product.price -= payload
      })
    }
  },
  actions:{ //添加actions
    minusPriceAsync( context, payload ) {
      setTimeout( () => {
        context.commit( 'minusPrice', payload ); //context提交
      }, 2000)
    }
  }
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值