原理图

安装
注意:
vue2只能使用vuex3版本
vue3只能使用vuex4版本
所以要在vue2中安装vuex
npm i vuex@3
使用
在main.js中使用
import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
new Vue({
el: "#app",
render: (h) => h(App),
store,
router,
});
store
1.在src下新建store文件夹内新建index.js文件
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex);
const actions = {}
const mutations = {}
const state = {}
export default new Vuex.Store({
actions,
mutations,
state,
});
求和案例
methods: {
increase(){
this.$store.commit('JIA',this.n)
},
decrease(){
this.$store.commit('JIAN',this.n)
},
increaseOdd(){
this.$store.dispatch('jiaOdd',this.n)
},
increaseWait(){
this.$store.dispatch('jiaWait',this.n)
}
},
export default new Vuex.Store({
state: {
sum: 0,
},
mutations: {
JIA(state,value){
state.sum += value
},
JIAN(state,value){
state.sum -= value
},
},
actions: {
jiaOdd(context,value){
if(context.state.sum % 2){
context.commit('JIA', value)
}
},
jiaWait(context,value){
setTimeout(() => {
context.commit('JIA',value)
}, 1000);
}
},
getters: {},
modules: {},
});
mapState 与 mapGetters 使用
<template>
<div>
<h2>当前求和为:{{sum}}</h2>
<h1>当前求得放大10倍为:{{bigSum}}</h1>
<h2>我是: {{name}} 我的爱好是: {{hobbit}}</h2>
<select v-model.number="n">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<button @click="increase">+</button>
<button @click="decrease">-</button>
<button @click="increaseOdd">和为奇数再加</button>
<button @click="increaseWait">等一会再加</button>
</div>
</template>
<script>
import {mapState,mapGetters} from 'vuex'
export default {
name: 'Count',
data() {
return {
n:1
}
},
computed:{
...mapState(['sum','name','hobbit']),
...mapGetters(['bigSum'])
},
};
</script>
mapMutations() 和 mapActions() 使用
<template>
<div>
<h2>当前求和为:{{sum}}</h2>
<h1>当前求得放大10倍为:{{bigSum}}</h1>
<h2>我是: {{name}} 我的爱好是: {{hobbit}}</h2>
<select v-model.number="n">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<button @click="increase(n)">+</button>
<button @click="decrease(n)">-</button>
<button @click="increaseOdd(n)">和为奇数再加</button>
<button @click="increaseWait(n)">等一会再加</button>
</div>
</template>
<script>
import {mapState,mapGetters,mapMutations,mapActions} from 'vuex'
export default {
name: 'Count',
data() {
return {
n:1
}
},
methods: {
...mapMutations({increase:'JIA',decrease:'JIAN'}),
...mapActions({increaseOdd:'jiaOdd',increaseWait:'jiaWait'}),
},
};
</script>
备注
mapMutations()和mapActions() 若需要传递参数 则需要再模板绑定事件时传递好参数否则参数为event
<button @click="increase(n)">+</button>
<button @click="decrease(n)">-</button>
<button @click="increaseOdd(n)">和为奇数再加</button>
<button @click="increaseWait(n)">等一会再加</button>
多组件共享数据
通过mapState读取存储在state的数据在页面上呈现
webStoreage
1.存储内容大小---一般为5MB左右
2.浏览器通过 Window.sessionStoreage 和 Window.locationStoreage属性来实现本地存储机制
2.相关API
存储 该方法接收一个键值对均为字符类型作为参数 存储到location或location中
location/sessionStoreage.setItem('key','value'),
读取 该方法接收一个键名 作为参数 返回对应键名的值
location/sessionStoreage.getItem('person'),
删除 该方法接收一个键名作为参数 并把该键名从存储中删除
location/sessionStoreage.removeItem('person'),
清空 该方法会清空存储中所有的数据
location/sessionStoreage.clear(),
3.备注
1. sessionStoreage中存储的内容会随着浏览器窗口的关闭而消失
2. locationStoreage中存储的的数据需要手动清除才会消失
3. location/sessionStoreage.getItem('person') 如果找不到对应键名的值 则返回 null
4. JSON.stringify({XXXX})将对象类型转换为字符串 JSON.parse() 方法将数据转换为 JavaScript 对象
5.JSON.parse(Null)的结果依旧是null