diff --git a/packages/runtime/src/components/chakra-ui/List.tsx b/packages/runtime/src/components/chakra-ui/List.tsx index 239786f0..85fcf54f 100644 --- a/packages/runtime/src/components/chakra-ui/List.tsx +++ b/packages/runtime/src/components/chakra-ui/List.tsx @@ -38,10 +38,16 @@ const List: ComponentImplementation<{ if (!listData) { return null; } - + const itemElementMemo = useRef(new Map()); const parsedtemplete = template.map(parseTypeComponents); const listItems = listData.map((listItem, i) => { + if (itemElementMemo.current.has(listItem.id)) { + if (itemElementMemo.current.get(listItem.id).value === listItem) { + return itemElementMemo.current.get(listItem.id).ele; + } + } + const evaledTemplate = mapValuesDeep( { parsedtemplete }, ({ value, key }) => { @@ -69,11 +75,17 @@ const List: ComponentImplementation<{ ); }); - return ( + const listItemEle = ( {componentElements} ); + + itemElementMemo.current.set(listItem.id, { + value: listItem, + ele: listItemEle, + }); + return listItemEle; }); return {listItems};