From 05e107f4fab7414f3cee8033a4aa08993f620f92 Mon Sep 17 00:00:00 2001 From: Zeke Zhang <958414905@qq.com> Date: Mon, 17 Feb 2025 16:45:19 +0800 Subject: [PATCH] fix: block refresh issue (#6233) --- .../CustomRouterContextProvider.tsx | 22 ++++++++++++------- .../schema-component/antd/action/context.tsx | 8 ++++--- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/packages/core/client/src/application/CustomRouterContextProvider.tsx b/packages/core/client/src/application/CustomRouterContextProvider.tsx index b61bf9aaf0..97d0659165 100644 --- a/packages/core/client/src/application/CustomRouterContextProvider.tsx +++ b/packages/core/client/src/application/CustomRouterContextProvider.tsx @@ -9,7 +9,7 @@ import { Schema } from '@formily/json-schema'; import _ from 'lodash'; -import React, { FC, useEffect, useMemo, useRef, useState } from 'react'; +import React, { FC, useCallback, useEffect, useMemo, useRef, useState } from 'react'; import { Location, NavigateFunction, @@ -62,11 +62,13 @@ const RouterBasenameContext = React.createContext(''); RouterBasenameContext.displayName = 'RouterBasenameContext'; const IsSubPageClosedByPageMenuContext = React.createContext<{ - isSubPageClosedByPageMenu: boolean; + isSubPageClosedByPageMenu: () => boolean; setFieldSchema: React.Dispatch>; + reset: () => void; }>({ - isSubPageClosedByPageMenu: false, - setFieldSchema: () => {}, + isSubPageClosedByPageMenu: () => false, + setFieldSchema: () => { }, + reset: () => { }, }); IsSubPageClosedByPageMenuContext.displayName = 'IsSubPageClosedByPageMenuContext'; @@ -75,7 +77,7 @@ export const IsSubPageClosedByPageMenuProvider: FC = ({ children }) => { const prevParamsRef = useRef({}); const [fieldSchema, setFieldSchema] = useState(null); - const isSubPageClosedByPageMenu = useMemo(() => { + const isSubPageClosedByPageMenu = useCallback(() => { const result = _.isEmpty(params['*']) && fieldSchema?.['x-component-props']?.openMode === 'page' && @@ -86,7 +88,11 @@ export const IsSubPageClosedByPageMenuProvider: FC = ({ children }) => { return result; }, [fieldSchema, params]); - const value = useMemo(() => ({ isSubPageClosedByPageMenu, setFieldSchema }), [isSubPageClosedByPageMenu]); + const reset = useCallback(() => { + prevParamsRef.current = {}; + }, []); + + const value = useMemo(() => ({ isSubPageClosedByPageMenu, setFieldSchema, reset }), [isSubPageClosedByPageMenu, reset]); return ( {children} @@ -242,13 +248,13 @@ export const useRouterBasename = () => { * @returns */ export const useIsSubPageClosedByPageMenu = (fieldSchema: Schema) => { - const { isSubPageClosedByPageMenu, setFieldSchema } = React.useContext(IsSubPageClosedByPageMenuContext); + const { isSubPageClosedByPageMenu, setFieldSchema, reset } = React.useContext(IsSubPageClosedByPageMenuContext); useEffect(() => { setFieldSchema(fieldSchema); }, [fieldSchema, setFieldSchema]); - return isSubPageClosedByPageMenu; + return { isSubPageClosedByPageMenu, reset }; }; export const CustomRouterContextProvider: FC = ({ children }) => { diff --git a/packages/core/client/src/schema-component/antd/action/context.tsx b/packages/core/client/src/schema-component/antd/action/context.tsx index 026f4894a3..37b6c6ab04 100644 --- a/packages/core/client/src/schema-component/antd/action/context.tsx +++ b/packages/core/client/src/schema-component/antd/action/context.tsx @@ -25,11 +25,13 @@ export const ActionContextProvider: React.FC { const run = async () => { - if (visible === false && service && !service.loading && (submitted || isSubPageClosedByPageMenu)) { + if (visible === false && service && !service.loading && (submitted || isSubPageClosedByPageMenu())) { + reset(); + // Prevent multiple requests from being triggered service.loading = true; await service.refreshAsync(); @@ -41,7 +43,7 @@ export const ActionContextProvider: React.FC ({ ...props, ...props?.value, submitted, setSubmitted }), [props, submitted]);