vueX笔记整理

vuex的基本介绍

vuex的基本概念

Vuex是一个专门为Vue.js应用程序开发的状态管理模式。它采用集中式的存储管理应用所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生改变。

vuex是vue的状态管理工具,状态即数据, 状态管理就是管理vue中的数据。

注意:

  • 不是所有的场景都适用于vuex,只有在必要的时候才使用vuex,如果不必要,尽量别用
  • 使用了vuex之后,会附加更多的框架中的概念进来,增加了项目的复杂度
vuex的优点
  • 可以用来解决组件通讯的问题
  • vuex可以用来集中的管理vue项目中用到的所有数据(这并不意味着要将所有的数据都交给vuex进行管理)
为什么要使用vuex
  • 在大型的项目中,组件通讯会变得很混乱,使用vuex可以统一的管理组件之间的通讯。并且可以通过开发者工具,追踪到变化。

vuex的基本创建

安装
  • yarn add vuex 或者
  • npm i vuex
  • 引包
<script src="vue.js"></script>
<script src="vuex.js"></script>
创建
//访问Vuex的数据
<div id="app">{{$store.state.count}}</div>
<script>
// 1.使用vuex
Vue.use(Vuex)
// 2.创建Store,用于存储数据和操作数据
const store = new Vuex.Store({
  //开发模式下开启严格模式,组件不能直接修改vueX中的数据
  //注意:上线要关闭严格模式
  strict: true ,
  // 指定state属性,用于提供数据
  // 状态,类似于data,用于提供数据
  state: {
    count: 1
  }
})
const vm = new Vue({
	el: "#app", 
	data: {},
	store
	//3.将vuex关联到vm实例上此后所有的组件都可以通过this.$store.state.XXX
	//访问到vuex的数据
})
</script>

如何在vue项目中使用vuex

vuex的基本工作如下图

在这里插入图片描述

在项目中使用vuex
  • 新建store/index.js。类似于router/index.js
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)

// state用于存储数据
const state = {
	name: '张三', 
	age: 5
}
//mutations用于提供方法,mutations中的方法都是同步的,修改state的状态。 
const mutations = {
	
}
//getter:vuex中的计算属性,同vue中的计算属性相似。可供多组件使用
const getter = {}
//action: 同mutation类似,不同在于,action中可以存放任意的异步代码,
//并且提交的是一个mutation,由mutation进行更改状态。
export default new Vuex.Store({
  strict:true, 
  state, 
  mutations,
  getter,
  actions
})
  • 在组件中使用vuex
//在组建中可以通过this.$store.state访问vuex的数据
//使用严格模式,我们就不能通过v-model绑定vuex中数据,这时候要修改vuex中的数据,就需要提交mutation
//commit 类似于$emit 
//提交单个数据
this.$store.commit('change',name )
//vuex中
mutations:{
   //只能接受两个参数,第一个参数固定state
   change(state , name){
   state.name = name
  }
}
//------------------提交多个数据的写法-------
this.$store.commit('change', {
   name: '李四',
   age:15
   })
//vuex
const mutations = {
   //这里的payload就是我们传递过来的对象。
   change(state , payload){
   		state.name = payload.name
   		state.age = payload.age
   	}
}
//-----------------碰到异步的函数修改state------
//首先store分发action
this.$store.dispatch("changeAction", {
   name : '李四'
})
//action中提交一个mutation
const action = {
//context 同 store
changeAction(context){
   	setTimeout(()=>{
   		context.commit('change' , {name:'李四'})	
   	})	
   }
}
  • 简写
import { mapState, mapGetters ,mapMutations } from 'vuex'
computed: {
//映射vuex的状态和计算属性和方法
   ...mapState(['list']),
   ...mapGetters(['leftCount'])...mapMutations({
     add: 'increment' // 将 `this.add()` 映射为 `this.$store.commit('increment')`
   })
 },
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值