vue3封装一个获取字典值的方法,或者公共数据的hooks

本文介绍了如何在Vue3的uniapp项目中,利用Vuex4的store模块化结构实现公共字典的管理,包括useDict方法的使用、store的state、mutations和actions的定义,以及在页面中如何引用这些字典数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 我这个场景是vue3的uniapp,和vuex4,基于ruoyi框架的useDict方法得来的。

如果可以的话,大部分情况下都适用,比如h5...

如果是vue2的话,可以适当修改。

场景就是,如果有公共的字典,男女,状态,进度等等,又不想每个页面都调用,或者存在local,那么就可以存在vuex里,项目每次加载,同一个字典只会请求一次。

第一步先写个use方法

const useDict = (...args) => {
	const res = ref({});
	return (() => {
		args.forEach(async (dictType, index) => {
			res.value[dictType] = [];
			const dicts = await store.dispatch("getDict", dictType);
			if (dicts) {
				res.value[dictType] = dicts;
			} else {
				getDictByType(dictType).then(resp => {
					res.value[dictType] = resp.map(d => ({
						label: d.dictLabel,
						value: d.dictValue
					}));
					store.dispatch("setDict", { key: dictType, value: res.value[dictType] });
				});
			}
		});
		return toRefs(res.value);
	})();
};

然后封装一下个store modules,并挂载在createStore的modules中。

const dict = {
	state: {
		dict: []
	},
	mutations: {
		SET_DICT(state, data) {
			state.dict = data;
		}
	},
	actions: {
		// 获取字典
		getDict({ state }, _key) {
			if (_key == null || _key === "") {
				return null;
			}
			try {
				for (let i = 0; i < state.dict.length; i++) {
					let item = state.dict[i];
					if (item.key === _key) {
						return item.value;
					}
				}
			} catch (e) {
				return null;
			}
			return null; // 如果未找到对应的字典项,返回null
		},
		// 设置字典
		setDict({ state }, { key, value }) {
			if (key !== null && key !== "") {
				state.dict.push({ key, value });
			}
		},
		// 删除字典
		removeDict({ state }, _key) {
			let removed = false;
			try {
				for (let i = 0; i < state.dict.length; i++) {
					if (state.dict[i].key === _key) {
						state.dict.splice(i, 1);
						removed = true;
						break; // 找到并移除后直接退出循环
					}
				}
			} catch (e) {
				removed = false;
			}
			return removed;
		},
		// 清空字典
		cleanDict({ state }) {
			state.dict = []; // 直接赋空数组即可清空字典
		}
	}
};

export default dict;

页面中直接

import { useDict } from "@/utils";

const { task_type } = useDict("task_type");

// 如果多个
const { task_type, yes_or_no } = useDict("task_type", "yes_or_no ");

如果有对您有帮助的话, 还麻烦点个赞咯

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值