2017-02-18 3 views
0

Можно ли использовать React Virtualized, если нет понятия индекса строки для получения rowdata?Как использовать React Virtualized, если нет понятия индекса строки для получения rowdata?

Я бы хотел использовать React Virtualized для отображения данных, поступающих из большой (100k + rows) таблицы базы данных, которая постоянно изменяется: строки добавляются/удаляются/обновляются в случайных позициях в таблице.

У меня нет функции, которая может получить строку, используя индекс строки, поскольку положение каждой строки меняется каждые несколько секунд.

Таблица отсортирована и каждая строка гарантированно имеет уникальный контент, так, что у меня есть следующие функции:

getFirst/LastRow() => data: получить содержание данных для (в настоящее время) первой/последней строки

getNext/PreviousRows(startData, nrRows) => data[]: получить содержимое данных для (в данный момент) следующий/предыдущий nrRows, начиная со строки с содержанием startData

findRow(data) => data: найти строку, которая есть содержание data

У меня также есть функция наблюдателя, которая отслеживает мутации таблицы в реальном времени, поэтому я могу получить обратный вызов для каждой операции вставки/удаления/обновления для таблицы.

Есть ли способ сопоставить эти доступные функции с работоспособной виртуализованной конфигурацией React?

ответ

0

Можно ли использовать React Virtualized, если нет понятия индекса строки для получения rowdata?

Нет. Сопоставление индекса (или индексов) с данными является основным для того, как работает реакция-виртуализация. Вам нужно будет создать/поддерживать некоторую структуру, которая позволила бы вам эффективно получать данные по адресу индекс (даже если этот индекс часто менялся), чтобы извлечь выгоду из библиотеки.

Когда данные изменяются, каждые несколько секунд, обычно ли они добавляются на один конец удаленной коллекции? Или он может прибегать, удалять и т. Д.?

API-интерфейс связанного списка, который вы описываете, почти кажется, что он предназначен для работы с элементом управления разбиением на страницы.

+0

Изменения данных - это в основном обновления (которые изменят порядок сортировки) и вставки, которые обычно находятся в произвольной позиции в таблице (поэтому они также изменят порядок сортировки). Ошибки нечасты. Я надеялся, что может быть сделан какой-то метод recomputeRowIndices для повторной синхронизации данных строки RV с содержимым таблицы базы данных всякий раз, когда есть изменение в строках, которые в настоящее время управляются RV – willemx

+0

Текущий API действительно используется для управления разбиением на страницы. Я написал некоторый код, чтобы заставить его работать и с прокруткой, но он немного неуклюж. Использование RV было бы намного лучше. – willemx

+0

RV обычно работает очень хорошо, даже с большим количеством вставок/удалений/сортировок. Если вы напишете функцию сопоставления исполнителей (превращая API-интерфейс связанного списка в более массивную структуру), тогда вы должны быть в порядке. :) – brianvaughn