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

 我这个场景是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 ");

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

相关推荐

  1. vue3hook公共函数封装及运用

    2024-04-30 13:20:03       60 阅读
  2. vue3中通过数据字典实现下拉选择框组件封装

    2024-04-30 13:20:03       29 阅读
  3. c#设置或者获取一个泛型整数指定bit

    2024-04-30 13:20:03       34 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-30 13:20:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-30 13:20:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-30 13:20:03       82 阅读
  4. Python语言-面向对象

    2024-04-30 13:20:03       91 阅读

热门阅读

  1. 极端天气频发:普通人如何保全自己

    2024-04-30 13:20:03       25 阅读
  2. LED灯降压恒流驱动芯片5~60v输出1.5A大电流AP51656

    2024-04-30 13:20:03       31 阅读
  3. MATLAB使用贝叶斯网络bnt工具箱:使用手册详解

    2024-04-30 13:20:03       27 阅读
  4. 服务器根据功能划分有哪几种?

    2024-04-30 13:20:03       28 阅读
  5. centos学习-压缩和解压缩命令

    2024-04-30 13:20:03       32 阅读
  6. 如何衡量一个算法的好坏

    2024-04-30 13:20:03       30 阅读
  7. 软件工程师,如何有效缓解工作压力

    2024-04-30 13:20:03       29 阅读
  8. html知识应用(1)

    2024-04-30 13:20:03       32 阅读
  9. MySQL 迁移到 Oracle 需要注意的问题

    2024-04-30 13:20:03       34 阅读