1、npm 安装vuex包
vuex可以实现组件间数据共享
npm i vuex
2、在src文件夹下创建store,然后创建index.js文件
state里定义一个全局变量name
import { createStore } from 'vuex'
// VueX 数据管理框架
// VueX 创建了一个全局唯一的仓库,用来存放全局的数据
export default createStore({
state: { name: 'lgy' },
// mutation 里面只允许写同步代码,不允许写异步代码
// commit 和 mutation 做关联
mutations: {
change(state, str) {
state.name = str;
}
},
// dispatch 和 actions 做关联
actions: {
changeName(store, str) {
setTimeout(() => {
store.commit('change', str)
}, 2000)
}
}
})
3、在main.js引用store
import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
createApp(App).use(store).use(router).mount('#app')
4、在about组件中使用name
<template>
<div class="about">
<h1 @click="handleChange">This is an about page</h1>
<h1>{{name}}</h1>
</div>
</template>
<script>
export default{
computed: {
name() {
return this.$store.state.name;
}
},
methods: {
handleChange() {
// 1. dispatch 方法,派发一个 action,名字叫做change
// 2. 感知到 change 这个action,执行store 中 actions 下面的 change 方法
// 3. commit 提交一个叫做 change 的数据改变
// 4. mutation 感知到提交的change改变,执行 change 方法改变数据
// this.$store.commit('change', 'hello world');
this.$store.dispatch('changeName', 'hello');
}
}
}
</script>
5、store数据改变的步骤流程
1、先安装vuex
2、在store index.js中的state中定义全局共享变量,如name
3、在main.js中引入store
4、在组件中使用name共享变量,this.$store.state.name
5、在组件中改变共享变量name
// 1. dispatch 方法,派发一个 action,名字叫做changeName
// 2. 感知到 change 这个action,执行store 中 actions 下面的 change 方法
// 3. commit 提交一个叫做 change 的数据改变
// 4. mutation 感知到提交的change改变,执行 change 方法改变数据