React Window
React components for efficiently rendering large lists and tabular data
README
react-window
React components for efficiently rendering large lists and tabular data
React window works by only rendering part of a large data set (just enough to fill the viewport). This helps address some common performance bottlenecks:
1. It reduces the amount of work (and time) required to render the initial view and to process updates.
2. It reduces the memory footprint by avoiding over-allocation of DOM nodes.
Sponsors
The following wonderful companies have sponsored react-window:
Install
- ``` sh
- # Yarn
- yarn add react-window
- # NPM
- npm install --save react-window
- ```
Usage
Learn more at react-window.now.sh:
Related libraries
[react-virtualized-auto-sizer](https://npmjs.com/package/react-virtualized-auto-sizer): HOC that grows to fit all of the available space and passes the width and height values to its child.
[react-window-infinite-loader](https://npmjs.com/package/react-window-infinite-loader): Helps break large data sets down into chunks that can be just-in-time loaded as they are scrolled into view. It can also be used to create infinite loading lists (e.g. Facebook or Twitter).
[react-vtree](https://www.npmjs.com/package/react-vtree): Lightweight and flexible solution to render large tree structures (e.g., file system).
Frequently asked questions
How is react-window different from react-virtualized?
I wrote react-virtualized several years ago. At the time, I was new to both React and the concept of windowing. Because of this, I made a few API decisions that I later came to regret. One of these was adding too many non-essential features and components. Once you add something to an open source project, removing it is pretty painful for users.
If react-window provides the functionality your project needs, I would strongly recommend using it instead of react-virtualized. However if you need features that only react-virtualized provides, you have two options:
1. Use react-virtualized. (It's still widely used by a lot of successful projects!)
2. Create a component that decorates one of the react-window primitives and adds the functionality you need. You may even want to release this component to NPM (as its own, standalone package)! 🙂
Can a list or a grid fill 100% the width or height of a page?
Yes. I recommend using the [react-virtualized-auto-sizer package](https://npmjs.com/package/react-virtualized-auto-sizer):
Here's a Code Sandbox demo.
Why is my list blank when I scroll?
If your list looks something like this...
...then you probably forgot to use the style parameter! Libraries like react-window work by absolutely positioning the list items (via an inline style), so don't forget to attach it to the DOM element you render!
Can I lazy load data for my list?
Yes. I recommend using the [react-window-infinite-loader package](https://npmjs.com/package/react-window-infinite-loader):
Here's a Code Sandbox demo.
Can I attach custom properties or event handlers?
Yes, using the outerElementType prop.
Here's a Code Sandbox demo.
Can I add padding to the top and bottom of a list?
Yes, although it requires a bit of inline styling.
Here's a Code Sandbox demo.
Can I add gutter or padding between items?
Yes, although it requires a bit of inline styling.
Here's a Code Sandbox demo.
Does this library support "sticky" items?
Yes, although it requires a small amount of user code. Here's a Code Sandbox demo.
License
MIT © bvaughn