From 8571a08f593c8321b1f3d4597b9d3f0198ab8a34 Mon Sep 17 00:00:00 2001 From: yarnb Date: Sat, 13 Apr 2024 20:32:59 +0800 Subject: [PATCH] =?UTF-8?q?chore(Store):=20=E5=AE=8C=E5=96=84=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Store/index.tsx | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/src/Store/index.tsx b/src/Store/index.tsx index b9b4eee..34e503f 100644 --- a/src/Store/index.tsx +++ b/src/Store/index.tsx @@ -2,28 +2,36 @@ import React, { createContext, useContext, useEffect, useRef, useState } from 'r import { Spin } from 'antd'; import { handleError } from 'src/_utils/handleError'; -type StoreProps = { - children?: (data: Record) => React.ReactNode; - request?: () => Promise>; - name?: string; - depends?: string[]; // 依赖的组件名称数组 +// 定义存储在context中的每个数据条目的类型 +type StoreEntry = { + data: Record; + loaded: boolean; // 表示数据是否已加载完成 }; +// 更新StoreContext的类型,使其可以包括StoreEntry类型的数据 +type StoreContextType = Record; + export const useStore = (name: string) => { const context = useContext(StoreContext); - return context[name]; + return context[name]?.data; }; -// 创建一个context,用于保存按名称索引的数据和加载状态 -export const StoreContext = createContext>({}); +// 使用更新后的类型初始化StoreContext +export const StoreContext = createContext({}); + +type StoreProps = { + children?: (data: Record) => React.ReactNode; + request?: () => Promise>; + name?: string; + depends?: string[]; // 依赖的组件名称数组 +}; const Store = ({ children, request, name, depends = [] }: StoreProps) => { const [loading, setLoading] = useState(false); const [data, setData] = useState>({}); const requestCounterRef = useRef(0); - const context = useContext(StoreContext); // 使用context更新自己 + const context = useContext(StoreContext); - // 检查所有依赖的组件是否已加载完成 const allDependenciesResolved = depends.every((dependency) => context[dependency]?.loaded); const fetch = async () => { @@ -36,7 +44,7 @@ const Store = ({ children, request, name, depends = [] }: StoreProps) => { if (currentRequestIndex === requestCounterRef.current) { setData(newData); if (name) { - context[name] = { data: newData, loaded: true }; // 更新context中的数据和加载状态 + context[name] = { data: newData, loaded: true }; } } } catch (error) { @@ -50,7 +58,7 @@ const Store = ({ children, request, name, depends = [] }: StoreProps) => { useEffect(() => { fetch(); - }, [allDependenciesResolved]); // 当依赖项的加载状态变化时,重新触发请求 + }, [allDependenciesResolved]); return (