Skip to content

Commit eb337a1

Browse files
committed
refactor: optimize VirtualList rendering by replacing loop with map function
1 parent 956724a commit eb337a1

File tree

1 file changed

+23
-26
lines changed
  • apps/cowswap-frontend/src/common/pure/VirtualList

1 file changed

+23
-26
lines changed

apps/cowswap-frontend/src/common/pure/VirtualList/index.tsx

Lines changed: 23 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -49,29 +49,27 @@ interface VirtualListRowsProps<T> {
4949
measureElement(element: Element | null): void
5050
}
5151

52-
function renderVirtualListRows<T>({
52+
function VirtualListRows<T>({
5353
virtualItems,
5454
loading,
5555
items,
5656
getItemView,
5757
measureElement,
58-
}: VirtualListRowsProps<T>): ReactNode[] {
59-
const elements: ReactNode[] = []
60-
61-
for (const item of virtualItems) {
62-
elements.push(
63-
<VirtualListRow
64-
key={item.key}
65-
item={item}
66-
loading={loading}
67-
items={items}
68-
getItemView={getItemView}
69-
measureElement={measureElement}
70-
/>,
71-
)
72-
}
73-
74-
return elements
58+
}: VirtualListRowsProps<T>): ReactNode {
59+
return (
60+
<>
61+
{virtualItems.map((item) => (
62+
<VirtualListRow
63+
key={item.key}
64+
item={item}
65+
loading={loading}
66+
items={items}
67+
getItemView={getItemView}
68+
measureElement={measureElement}
69+
/>
70+
))}
71+
</>
72+
)
7573
}
7674

7775
interface VirtualListProps<T> {
@@ -138,20 +136,19 @@ export function VirtualList<T>({
138136
}, [scrollResetKey, virtualizer])
139137

140138
const virtualItems = virtualizer.getVirtualItems()
141-
const virtualRows = renderVirtualListRows({
142-
virtualItems,
143-
loading,
144-
items,
145-
getItemView,
146-
measureElement: virtualizer.measureElement,
147-
})
148139

149140
return (
150141
<ListWrapper id={id} ref={parentRef} onScroll={onScroll}>
151142
<ListInner ref={wrapperRef} style={{ height: virtualizer.getTotalSize() }}>
152143
<ListScroller style={{ transform: `translateY(${virtualItems[0]?.start ?? 0}px)` }}>
153144
{children}
154-
{virtualRows}
145+
<VirtualListRows
146+
virtualItems={virtualItems}
147+
loading={loading}
148+
items={items}
149+
getItemView={getItemView}
150+
measureElement={virtualizer.measureElement}
151+
/>
155152
</ListScroller>
156153
</ListInner>
157154
</ListWrapper>

0 commit comments

Comments
 (0)