Office UI Fabric: положение ScrollablePane не сбрасывается в исходное положение при обновлении списка сведений

Шаги репликации:

https://developer.microsoft.com/en-us/fluentui

Прокрутите список "Подробный список заблокированных заголовков" до ненулевой позиции, превышающей первую страницу, и введите "sed" в поле "фильтр по имени". Это обновляет список деталей, и полоса прокрутки не переходит в исходное положение.

Ошибка / Спросите:

Когда мы прокручиваем вниз, скажем, до позиции 50, и теперь, если есть обновление в списке деталей, скажем, предположим, что 350. Полоса прокрутки не возвращается в начальную позицию, и она перерисовывается в случайную позицию близко к верхнему (в моем кейс).

Подход / временный взлом:

Просматривая код, я заметил, что начальная позиция прокрутки прокручиваемой панели обновляется только тогда, когда в реализации меняются реквизиты initialScrollPosition. Я попытался изменить свойство initialScrollPosition в моем компоненте всякий раз, когда detailList обновляется, задав для него значение 0 или 1. При отладке свойства initialScrollPosition не менялись внутри компонента ScrollablePane. Это не сработало, и прокручиваемая панель все еще не установлена ​​в начало.

Кто-нибудь нашел обходной путь или решение для этого?

1 ответ

У меня была такая же проблема, я также использую бесконечную прокрутку (реагирующий бесконечный скроллер) для загрузки данных. что я наконец сделал, так это заменил scrollablepane на css.

(Функция handleGetNext просто загружает новые данные, а переменную dataToRender я сохраняю в состоянии, чтобы выполнить конкатенацию между старым и новым состоянием)

      <div>
  {handleSelect()}
 <div style={{ overflowY: "scroll", height: 500 }} id="containers">
                <InfiniteScroll
                  pageStart={0}
                  loadMore={() => {
                    handleGetNext(overviewData.page);
                    handleSelect();
                  }}
                  hasMore={!loadingNext && !!overviewData && overviewData.page < overviewData.totalPages}
                  initialLoad={false}
                  useWindow={false}
                >
                  <ShimmeredDetailsList items={dataToRender} enableShimmer={overviewLoading} .........../>
                </InfiniteScroll> 
  </div>
 </div>

А позже вам нужно будет установить позицию прокрутки, в зависимости от того, где вы хотите прокручивать.

      const handleSelect = () => {
  const elemToScrollTo = document.getElementById("containers");
  if (!!elemToScrollTo) {
    elemToScrollTo.scrollTop = 2100;//example
  }
};
Другие вопросы по тегам