У меня есть реагирующий виртуализированный список, который заполняется данными, поступающими от вызова API, который сохраняет извлеченные данные в хранилище избыточных данных. Действие, чтобы начать выборку данных из API, отправляется, когда компонент монтируется, данные поступают и сохраняются в хранилище, но список реагирующей виртуализации не обновляется с этими данными, пока страница не обновится вручную пару раз перед данные отображаются в списке.
Также в фоновом режиме выполняется опрос API для извлечения обновленных данных, которые затем будут отображаться в списке.
Как настроить список для прослушивания, когда данные поступают, и отображения данных соответствующим образом (для прослушивания изменений в хранилище избыточных данных). Вот моя реализация реагирующего виртуализированного InfiniteLoader & List:
< InfiniteLoader
isRowLoaded = {
this._isRowLoaded
}
loadMoreRows = {
this._loadMoreRows
}
rowCount = {
visibleRequest.length
} > {
({
onRowsRendered,
registerChild
}) => ( <
AutoSizer > {
({
height,
width
}) => (
<List ref = {ref => (this.registerChild = ref)}
className = "List"
height = {height}
rowHeight = {listRowHeight}
onRowsRendered = {onRowsRendered}
rowCount = {rowCount}
rowRenderer = {this._rowRenderer}
width = {width}
/>
)
}
</AutoSizer>
)
}
</InfiniteLoader>
// rowRenderer function
_rowRenderer = ({
index,
key,
style
}) => {
const {
loadedRowsMap,
selected
} = this.state;
const row = this.getDatum(index);
let content;
if (loadedRowsMap[index] === STATUS_LOADED) {
content = row;
} else {
content = ( <div className = "placeholder"
style = {
{
width: _.random(100, 200)
}
}
/>
);
}
return ( <NewRequest key = {key}
content = {content}
style = {style}
row = {row}
{...this.props}
/>
);
};