From 6b9c048d13452edbadc690e59266f62b496768e8 Mon Sep 17 00:00:00 2001 From: dap <15891557205@163.com> Date: Thu, 12 Sep 2024 16:06:11 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E9=87=8D=E6=9E=84=E5=AD=97?= =?UTF-8?q?=E5=85=B8store?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/web-antd/src/store/dict.ts | 12 ++++++++++++ apps/web-antd/src/utils/dict.ts | 13 +++---------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/apps/web-antd/src/store/dict.ts b/apps/web-antd/src/store/dict.ts index 4f9a866c..7cb4b88a 100644 --- a/apps/web-antd/src/store/dict.ts +++ b/apps/web-antd/src/store/dict.ts @@ -29,6 +29,16 @@ export const useDictStore = defineStore('app-dict', () => { * select radio radioButton使用 只能为固定格式(Option) */ const dictOptionsMap = reactive(new Map()); + /** + * 添加一个字典请求状态的缓存 + * + * 主要解决多次请求重复api的问题(不能用abortController 会导致除了第一个其他的获取的全为空) + * 比如在一个页面 index表单 modal drawer总共会请求三次 但是获取的都是一样的数据 + * 相当于加锁 保证只有第一次请求的结果能拿到 + */ + const dictRequestCache = reactive( + new Map>(), + ); function getDict(dictName: string): DictData[] { if (!dictName) return []; @@ -53,6 +63,7 @@ export const useDictStore = defineStore('app-dict', () => { } function resetCache() { + dictRequestCache.clear(); dictMap.clear(); dictOptionsMap.clear(); } @@ -90,6 +101,7 @@ export const useDictStore = defineStore('app-dict', () => { $reset, dictMap, dictOptionsMap, + dictRequestCache, getDict, getDictOptions, resetCache, diff --git a/apps/web-antd/src/utils/dict.ts b/apps/web-antd/src/utils/dict.ts index cccb0baa..be574ded 100644 --- a/apps/web-antd/src/utils/dict.ts +++ b/apps/web-antd/src/utils/dict.ts @@ -2,17 +2,10 @@ import type { DictData } from '#/api/system/dict/dict-data-model'; import { dictDataInfo } from '#/api/system/dict/dict-data'; import { type Option, useDictStore } from '#/store/dict'; -// todo 重复代码的封装 -/** - * 添加一个字典请求状态的缓存 - * - * 主要解决多次请求重复api的问题(不能用abortController 会导致除了第一个其他的获取的全为空) - * 比如在一个页面 index表单 modal drawer总共会请求三次 但是获取的都是一样的数据 - */ -const dictRequestCache = new Map>(); +// todo 重复代码的封装 export function getDict(dictName: string): DictData[] { - const { getDict, setDictInfo } = useDictStore(); + const { dictRequestCache, getDict, setDictInfo } = useDictStore(); // 这里拿到 const dictList = getDict(dictName); // 检查请求状态缓存 @@ -32,7 +25,7 @@ export function getDict(dictName: string): DictData[] { } export function getDictOptions(dictName: string): Option[] { - const { getDictOptions, setDictInfo } = useDictStore(); + const { dictRequestCache, getDictOptions, setDictInfo } = useDictStore(); const dictOptionList = getDictOptions(dictName); // 检查请求状态缓存 if (dictOptionList.length === 0 && !dictRequestCache.has(dictName)) {