Запрос данных с помощью React Query и React Table приводит к сбою страницы

Я разрабатываю приложение с помощью React Query и React Table, но таблица, кажется, ломается, когда я меняю ключ запроса, что приводит к сбою веб-сайта.

Я открыл вопрос об их GH, но у меня до сих пор нет ответа, и мне очень нужна помощь.

Вот минимальное воспроизведение проблемы: codesanbox

Сбой происходит при рендеринге таблицы (точнее, функции table.getRowModel()), а не при определении реальных столбцов или таблицы. Это также происходит только при ОБНОВЛЕНИИ ключей запроса, при первоначальном рендеринге все работает нормально.

Большое спасибо, Херби

Найдите «Обновление». добавил комментарий. codeandbox.io/p/sandbox/…

Inder 26.06.2024 11:38

Нет доступа... :(

Herbie Vine 26.06.2024 11:58

Виноват. Забыл об этом. Попробуй это. codeandbox.io/p/sandbox/…

Inder 26.06.2024 11:59

ммм да, странно... Я переместил фильтр в запрос, но простое запоминание исправляет это... Почему в этом случае нам нужно запоминать, несмотря на то, что мы просто возвращаем данные снова (см. здесь: codeandbox.io/ п/песочница/…)

Herbie Vine 26.06.2024 12:08

спасибо, кстати, я подтвержу ваш вопрос, если вы его добавите 👍🏼

Herbie Vine 26.06.2024 12:09
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
1
5
75
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Обновленная песочница

Проблемы с кодом

  1. queryFn: внутренняя операция фильтра возврата queryFn была выполнена на основе successOrError. В идеале отфильтрованные данные должны возвращаться из серверной части.

  2. Всякий раз, когда компонент выполняет повторную отрисовку (например, когда обновляется значение SuccessOrError, что происходит именно в момент сбоя страницы), если данные присутствуют, операция фильтра запускается снова, что, в свою очередь, обновляет значение таблицы, и компонент снова выполняет повторную отрисовку. Вот так мы и застреваем в бесконечном цикле повторных рендерингов.

  const table = useReactTable({
    columns,
    data: data
      ? data.filter((v) =>
          successOrError === "success" ? v.status < 400 : v.status >= 400
        )
      : [],
    getCoreRowModel: getCoreRowModel(),
  });

РЕШЕНИЕ:

Теперь memoizedData изменяется только при изменении зависимостей, а memoziedData передается в таблицу, а таблица обновляется только при обновлении memoizedData.

  // MEMOIZE DATA to avoid infinite rerenders.
  const memoizedData = useMemo(() => {
    if (!data) return [];

    return data.filter((v) =>
      successOrError === "success" ? v.status < 400 : v.status >= 400
    );
  }, [data, successOrError]);

Другие вопросы по теме