Skip to content

Commit 7677ad0

Browse files
rainkeliujuping
authored andcommitted
fix: hoc 组件缓存
1 parent a96961f commit 7677ad0

2 files changed

Lines changed: 20 additions & 4 deletions

File tree

packages/renderer-core/src/hoc/index.tsx

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,12 @@ import { cloneEnumerableProperty } from '@alilc/lowcode-utils';
22
import adapter from '../adapter';
33
import { IBaseRendererInstance, IRendererProps } from '../types';
44

5-
function patchDidCatch(Comp: any, { baseRenderer }: { baseRenderer: IBaseRendererInstance }) {
5+
interface Options {
6+
baseRenderer: IBaseRendererInstance;
7+
schema: any;
8+
}
9+
10+
function patchDidCatch(Comp: any, { baseRenderer }: Options) {
611
if (Comp.patchedCatch) {
712
return;
813
}
@@ -44,7 +49,9 @@ function patchDidCatch(Comp: any, { baseRenderer }: { baseRenderer: IBaseRendere
4449
}
4550
}
4651

47-
export function compWrapper(Comp: any, options: { baseRenderer: IBaseRendererInstance }) {
52+
const cache = new Map();
53+
54+
export function compWrapper(Comp: any, options: Options) {
4855
const { createElement, Component, forwardRef } = adapter.getRuntime();
4956
if (
5057
Comp?.prototype?.isReactComponent || // react
@@ -54,6 +61,11 @@ export function compWrapper(Comp: any, options: { baseRenderer: IBaseRendererIns
5461
patchDidCatch(Comp, options);
5562
return Comp;
5663
}
64+
65+
if (cache.has(options.schema.id)) {
66+
return cache.get(options.schema.id);
67+
}
68+
5769
class Wrapper extends Component {
5870
render() {
5971
return createElement(Comp, { ...this.props, ref: this.props.forwardRef });
@@ -63,10 +75,14 @@ export function compWrapper(Comp: any, options: { baseRenderer: IBaseRendererIns
6375

6476
patchDidCatch(Wrapper, options);
6577

66-
return cloneEnumerableProperty(
78+
const WrapperComponent = cloneEnumerableProperty(
6779
forwardRef((props: any, ref: any) => {
6880
return createElement(Wrapper, { ...props, forwardRef: ref });
6981
}),
7082
Comp,
7183
);
84+
85+
cache.set(options.schema.id, WrapperComponent);
86+
87+
return WrapperComponent;
7288
}

packages/renderer-core/src/renderer/base.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -615,7 +615,7 @@ export default function baseRendererFactory(): IBaseRenderComponent {
615615
});
616616
});
617617

618-
Comp = compWrapper(Comp, { baseRenderer: this });
618+
Comp = compWrapper(Comp, { baseRenderer: this, schema });
619619
components[schema.componentName] = Comp;
620620

621621
otherProps.ref = (ref: any) => {

0 commit comments

Comments
 (0)