The AutoSizer component decorates a React element and automatically manages width and height properties so that decorated element fills the available space. This simplifies usage of components like Grid, FlexTable, and VirtualScroll that require explicit dimensions.
This guide covers a few of the most commonly asked questions about using the component.
You can use AutoSizer to control only one dimension of its child component using the disableHeight or disableWidth attributes. For example, a fixed-height component that should grow to fill the available width can be created like so:
<AutoSizer disableHeight>
{({ width }) => (
<Component
height={200}
width={width}
{...props}
/>
)}
</AutoSizer>When using an AutoSizer as a direct child of a flex box it usually works out best to wrap it with a div, like so:
<div style={{ display: 'flex' }}>
<!-- Other children... -->
<div style={{ flex: '1 1 auto' }}>
<AutoSizer>
{({ height, width }) => (
<Component
width={width}
height={height}
{...props}
/>
)}
</AutoSizer>
</div>
</div>AutoSizer can be used within other react-virtualized HOCs such as InfiniteLoader or ScrollSync like so:
<InfiniteLoader {...infiniteLoaderProps}>
{({ onRowsRendered, registerChild }) => (
<AutoSizer>
{({ height, width }) => (
<VirtualScroll
ref={registerChild}
width={width}
height={height}
onRowsRendered={onRowsRendered}
{...virtualScrollProps}
/>
)}
</AutoSizer>
)}
</InfiniteLoader>You can see an example of just such a thing here.