需求场景
- 需要在vue中存储一个可变的,可读写的全局变量
- 在不同的js、页面中均可调用和读写
技术:使用vue的store
用法总结
一、定义变量
1、找到vue的/src/store
路径,在modules文件夹下创建文件(这里便于测试创建demo.js);
2、编写代码
需要包含state/mutations/actions代码块,分别作用是
- state:定义常量
- mutaions:在Vuex中,mutations是用于改变store(应用的全局状态)的唯一方法。
- actions:触发mutations的异步操作,从而更新 Vuex 的状态。
demo如下:注释来自于tongyi
/*** 定义一个包含初始状态的对象。* @state {Object} 包含姓名、年龄和头像的初始状态。*/
const state = {name: "",age: "",avatar: "",
};/*** 定义一个包含状态变更函数的对象。* @mutations {Object} 包含用于修改状态的函数。* 每个函数接收两个参数:当前状态对象和需要变更的值。*/
const mutations = {/*** 设置姓名。* @param {Object} state 当前状态对象。* @param {String} name 需要设置的姓名。*/SET_NAME: (state, name) => {state.name = name;},/*** 设置年龄。* @param {Object} state 当前状态对象。* @param {Number} age 需要设置的年龄。*/SET_AGE: (state, age) => {state.age = age;},/*** 设置头像。* @param {Object} state 当前状态对象。* @param {String} avatar 需要设置的头像URL。*/SET_AVATAR: (state, avatar) => {state.avatar = avatar;},
};/*** 定义一个包含异步操作的对象。* @actions {Object} 包含用于触发状态变更的异步函数。* 每个函数接收两个参数:上下文对象和需要传递给 mutation 的数据。*/
const actions = {/*** 用于设置姓名的异步操作。* @param {Object} context 包含状态对象和其它方法的对象。* @param {String} name 需要设置的姓名。*/setName({ commit }, name) {commit("SET_NAME", name);},/*** 用于设置年龄的异步操作。* @param {Object} context 包含状态对象和其它方法的对象。* @param {Number} age 需要设置的年龄。*/setAge({ commit }, age) {commit("SET_AGE", age);},/*** 用于设置头像的异步操作。* @param {Object} context 包含状态对象和其它方法的对象。* @param {String} avatar 需要设置的头像URL。*/setAvatar({ commit }, avatar) {commit("SET_AVATAR", avatar);},
};export default {namespaced: true,state,mutations,actions,
}
二、修改变量
1、引入store
import store from "@/store";
2、调用dispatch方法就可以写入数值
// 存入全局变量
store.dispatch("demo/setName", '张三');
store.dispatch("demo/setAge", 18);
store.dispatch("demo/setAvatar", 'ss.jpg');
三、读取数值
1、在getters.js
中定义取值方法如下
const getters = {demoName: (state) => state.demo.name,demo: (state) => state.demo,
};
export default getters;
2、在需要调用的地方引入store并使用getters对象进行引用如下
import store from "@/store";//....
// 读取全局变量
console.log('store.getters.demoName -->',store.getters.demoName);
console.log('store.getters.demo -->',store.getters.demo);
打印效果如下:
总结
在开发过程中使用store,可以在vue内部存储很多全局变量,例如常见的系统配置信息,登陆的用户信息等等;而且不仅能存储变量,还支持存储方法和一些复杂的逻辑。
反过来,在阅读代码时,也可以通过在查看指定位置store的代码去获取一些全局信息,更有利于理解整体的代码逻辑。