# react-window — Efficiently Render Large Lists and Tabular Data > A lightweight React library for virtualizing long lists and grids, rendering only visible items to keep scroll performance smooth even with tens of thousands of rows. ## Install Save as a script file and run: # react-window — Efficiently Render Large Lists and Tabular Data ## Quick Use ```bash npm install react-window ``` ```jsx import { FixedSizeList } from 'react-window'; const Row = ({ index, style }) => (
Row {index}
); function App() { return ( {Row} ); } ``` ## Introduction react-window is a lightweight library for rendering only the visible portion of large datasets in React. Instead of mounting thousands of DOM nodes, it creates a scrollable viewport and renders just the items currently on screen. This approach keeps memory usage low and scrolling smooth regardless of list size. ## What react-window Does - Virtualizes lists so only visible rows are rendered in the DOM - Supports fixed-size and variable-size lists and grids - Reduces memory consumption for datasets with thousands of items - Provides a simple render-prop API for maximum flexibility - Works with both vertical and horizontal scrolling ## Architecture Overview react-window calculates which items are visible based on the scroll offset and container dimensions. It positions each visible item absolutely within a container sized to the total content height. On scroll, it recalculates the visible range and mounts or unmounts item components accordingly. The library uses `requestAnimationFrame`-throttled scroll handlers to maintain 60fps performance. ## Self-Hosting & Configuration - Install via npm: `npm install react-window` - Choose the right component: `FixedSizeList`, `VariableSizeList`, `FixedSizeGrid`, or `VariableSizeGrid` - Pass `itemCount`, `itemSize`, `height`, and `width` as required props - Use `react-window-infinite-loader` for paginated data loading - Add `react-virtualized-auto-sizer` if the container size is dynamic ## Key Features - Tiny bundle size (~6KB gzipped) compared to react-virtualized - Fixed and variable item size support for lists and grids - Scroll-to-item API for programmatic navigation - Compatible with `react-window-infinite-loader` for lazy loading - Simple render-prop pattern for custom item rendering ## Comparison with Similar Tools - **react-virtualized** — predecessor with more features but much larger bundle - **TanStack Virtual** — headless, framework-agnostic, newer API with hooks - **react-virtuoso** — auto-sizing, grouped lists, simpler API for complex cases - **@tanstack/react-virtual** — hook-based, more flexible but requires more setup - **vue-virtual-scroller** — similar concept for Vue applications ## FAQ **Q: When should I use VariableSizeList?** A: Use it when rows have different heights. Pass an `itemSize` function that returns the height for each index. **Q: How do I handle dynamic container sizes?** A: Wrap the list in `` from `react-virtualized-auto-sizer` to pass current width and height. **Q: Can I use react-window with infinite scrolling?** A: Yes, pair it with `react-window-infinite-loader` to load more items as the user scrolls near the bottom. **Q: How does it differ from react-virtualized?** A: react-window is a complete rewrite focused on smaller size and simpler API. It covers the core use cases with fewer components. ## Sources - https://github.com/bvaughn/react-window - https://react-window.vercel.app --- Source: https://tokrepo.com/en/workflows/asset-502241aa Author: Script Depot