fix: refresh association field data after page switching (#6114)

This commit is contained in:
Zeke Zhang 2025-01-22 17:17:29 +08:00 committed by GitHub
parent a55e8a8cca
commit 03db13f241
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 11 additions and 8 deletions

View File

@ -13,7 +13,6 @@ import { ACLCollectionProvider } from '../../acl/ACLProvider';
import { UseRequestOptions, UseRequestService } from '../../api-client'; import { UseRequestOptions, UseRequestService } from '../../api-client';
import { DataBlockCollector, FilterParam } from '../../filter-provider/FilterProvider'; import { DataBlockCollector, FilterParam } from '../../filter-provider/FilterProvider';
import { withDynamicSchemaProps } from '../../hoc/withDynamicSchemaProps'; import { withDynamicSchemaProps } from '../../hoc/withDynamicSchemaProps';
import { KeepAliveContextCleaner } from '../../route-switch/antd/admin-layout/KeepAlive';
import { Designable, useDesignable } from '../../schema-component'; import { Designable, useDesignable } from '../../schema-component';
import { import {
AssociationProvider, AssociationProvider,
@ -192,12 +191,9 @@ export const DataBlockProvider: FC<Partial<AllDataBlockProps>> = withDynamicSche
<ACLCollectionProvider> <ACLCollectionProvider>
<DataBlockResourceProvider> <DataBlockResourceProvider>
<BlockRequestProvider> <BlockRequestProvider>
{/* Must be placed inside BlockRequestProvider because BlockRequestProvider uses KeepAliveContext */}
<KeepAliveContextCleaner>
<DataBlockCollector params={props.params}> <DataBlockCollector params={props.params}>
<RerenderDataBlockProvider>{children}</RerenderDataBlockProvider> <RerenderDataBlockProvider>{children}</RerenderDataBlockProvider>
</DataBlockCollector> </DataBlockCollector>
</KeepAliveContextCleaner>
</BlockRequestProvider> </BlockRequestProvider>
</DataBlockResourceProvider> </DataBlockResourceProvider>
</ACLCollectionProvider> </ACLCollectionProvider>

View File

@ -14,6 +14,7 @@ import React, { useEffect, useMemo, useState } from 'react';
import { useAPIClient, useRequest } from '../../../api-client'; import { useAPIClient, useRequest } from '../../../api-client';
import { useCollectionManager } from '../../../data-source/collection'; import { useCollectionManager } from '../../../data-source/collection';
import { markRecordAsNew } from '../../../data-source/collection-record/isNewRecord'; import { markRecordAsNew } from '../../../data-source/collection-record/isNewRecord';
import { useKeepAlive } from '../../../route-switch/antd/admin-layout/KeepAlive';
import { useSchemaComponentContext } from '../../hooks'; import { useSchemaComponentContext } from '../../hooks';
import { AssociationFieldContext } from './context'; import { AssociationFieldContext } from './context';
@ -85,7 +86,13 @@ export const AssociationFieldProvider = observer(
}, },
); );
const { active } = useKeepAlive();
useEffect(() => { useEffect(() => {
if (!active) {
return;
}
setLoading(true); setLoading(true);
if (!collectionField) { if (!collectionField) {
setLoading(false); setLoading(false);
@ -136,7 +143,7 @@ export const AssociationFieldProvider = observer(
} }
setLoading(false); setLoading(false);
}, [currentMode, collectionField, field]); }, [currentMode, collectionField, field, active]);
if (loading || rLoading) { if (loading || rLoading) {
return null; return null;