Задать вопрос
@SeventimeSsS

Как перестать ререндерить уже отпрессованные элементы?

Пишу на фреймворке SOLID JS, и у меня есть проблема с виртуальным свитком, при добавление хоть одного нового элемента в массив видимых элементов, ререндерится весь список, как это пофиксить?
//useState
 const [scrollTop, setScrollTop] = createSignal<number>(0);
  const [viewportPosition, setViewportPosition] = createSignal<number>(0);
  const [visibleChildren, setVisibleChildren] = createSignal<any>();

//useEffect
  createEffect(() => {
    let startNode = Math.floor(scrollTop() / rowHeight) - nodePadding;
    startNode = Math.max(0, startNode);
    setViewportPosition(startNode);
  });

// useMemo
  createMemo(() => {
    const visibleChildren = new Array(visibleNodeCount)
      .fill(null)
      .map((_, index) => renderItem(index + viewportPosition()));
    setVisibleChildren(visibleChildren);
  });

Проблема в то что setVisibleChildren все время заменяет массив полностью, но как я могу обновлять только новые элементы?
  • Вопрос задан
  • 39 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы