介绍:
一个公共数据管理工具。可以把一些共享的数据保存到vuex中,方便整个程序中任何组件直接获取或修改。
作用:
为了保存组件之间需要共享的数据。
vuex&props&data之间的区别:
替代:
vuex 可以使用 localStorage 或者 sessionStorage 替代,在小项目中,能不使用 vuex 就不使用,没有必要。
1. 运行 npm install vuex -S
2. src目录下面新建一个vuex的文件夹,vuex 文件夹里面新建一个store.js
// 在创建的store.js 中引入 vue、vuex
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
// 定义数据
var state = {
count:1
}
// 包装数据(可以理解为store的计算属性)
var getters = { // 只负责对外提供数据,不负责修改。如果想要修改,请使用 mutation
optCount: function(state) {
return '当前累加值count是:' + state.count
}
}
// 定义方法(改变state中的数据)
var mutations = {
// 参数1:state状态 参数2:通过commit提交过来的参数,只能是一个,多个则使用对象形式{a:1,b:2}
incCount(state, a){
state.count += a
}
}
// 异步请求
var actions = {
//Action 函数接受一个与 store 实例具有相同方法和属性的 context 对象
increment(context) {
let a = context.state.a
context.commit('incCount')
},
checkout({ commit, state }, payload) {
commit('increment')
}
}
// 暴露
const store = new Vuex.Store({
state,
mutations
})
export default store
3. 组建里面使用vuex
// 引入 store
import store from '../vuex/store.js';
// 获取vuex数据
this.$store.state.count
// or
this.$store.getters.optCount
// 更新vuex数据
this.$store.commit('incCount', 2);
// 异步更新
this.$store.dispatch('checkout', payload);
存储:
localStorage.setItem('car', JSON.stringify(state.car));