I found this extremely confusing but here's my code (hoping it can help):
class Row extends PureComponent {
render() {
const { data, index, style } = this.props
const {
classes,
itemsPerRow,
shows,
setCardMarkerHover,
resetCardMarkerHover,
playTrack,
} = data
const items = []
const fromIndex = index * itemsPerRow
const toIndex = Math.min(fromIndex + itemsPerRow, shows.length)
//console.log(this.props)
for (let i = fromIndex; i < toIndex; i++) {
items.push(
<ShowCard
key={i}
item={shows[i]}
setCardMarkerHover={setCardMarkerHover}
resetCardMarkerHover={resetCardMarkerHover}
playTrack={playTrack}
/>
)
}
// console.log(items)
return (
<div className={classes.Row} style={style}>
{items}
</div>
)
}
}
class FastList extends React.Component {
getItemData = memoize(
(
classes,
itemsPerRow,
shows,
setCardMarkerHover,
resetCardMarkerHover,
playTrack
) => ({
classes,
itemsPerRow,
shows,
setCardMarkerHover,
resetCardMarkerHover,
playTrack,
})
)
render() {
const {
shows,
classes,
setCardMarkerHover,
resetCardMarkerHover,
playTrack,
} = this.props
//console.log(this.props)
// console.log(shows);
return (
<div style={{ height: "90vh", minWidth: "20vw" }}>
<AutoSizer>
{({ height, width }) => {
const itemsPerRow = 1
const rowCount = Math.ceil(shows.length / itemsPerRow)
const itemData = this.getItemData(
classes,
itemsPerRow,
shows,
setCardMarkerHover,
resetCardMarkerHover,
playTrack
)
return (
<div>
<List
height={height}
itemCount={rowCount}
itemData={itemData}
itemSize={CARD_SIZE}
width={width}
>
{Row}
</List>
</div>
)
}}
</AutoSizer>
</div>
)
}
}
FastList.propTypes = {
classes: PropTypes.object.isRequired,
}
export default withStyles(styles)(FastList)