Eu uso o React virtualizado para mostrar alguns itens. Meu problema agora é como posso adicionar margem para cada caixa para ter espaço entre cada caixa?
aqui está uma sandbox que você vê todas as caixas são delimitadas e não têm espaço. Como posso adicionar espaço?
e aqui está o meu código de lista
export function VirtualizedGrid<ItemType>({
items,
renderItem,
itemHeight,
itemMinWidth,
numColumns,
registerChild,
onRowsRendered
}: VirtualizedGridProps<ItemType>): JSX.Element {
const gridRef = useRef<any>(null);
const containerRef = useRef<any>(null);
const containerWidth = containerRef?.current?.clientWidth ?? 0;
const windowSize = useWindowSize();
useEffect(() => {
gridRef.current?.recomputeGridSize();
}, [windowSize]);
function calculateColumnCount(width: number) {
return Math.floor(width / itemMinWidth);
}
function calculateItemWidth(width: number, columnCount: number) {
return width / columnCount;
}
const columnCount = numColumns ?? calculateColumnCount(containerWidth);
const rowCount = Math.ceil(items.length / columnCount);
const itemWidth = calculateItemWidth(containerWidth, columnCount);
return (
<Container ref={containerRef}>
<WindowScroller>
{({ height, isScrolling, onChildScroll, scrollTop }) => (
<AutoSizer disableHeight>
{() => {
return (
<Grid
// ref={gridRef}
ref={(el) => {
registerChild(el);
gridRef.current = el;
}}
autoHeight
columnCount={columnCount}
columnWidth={itemWidth}
width={containerWidth}
height={height}
rowCount={rowCount}
rowHeight={itemHeight}
isScrolling={isScrolling}
scrollTop={scrollTop}
onScroll={onChildScroll}
cellRenderer={(props: GridCellProps) => {
const fullProps: VirtualizedGridItemProps<ItemType> = {
...props,
items,
columnCount: columnCount
};
return renderItem(fullProps);
}}
/>
);
}}
</AutoSizer>
)}
</WindowScroller>
</Container>
);
}
Basta adicionar preenchimento condicional com base nos índices de itens ao elemento Container do seu TestGridItem.tsx .
Aqui está um exemplo de Sandbox baseado no seu código