@gaming_shark

Как правильно обработать запрос в rtkq?

export const Schedule = (props: ScheduleProps) => {
  const selectedDay = useAppSelector(selectScheduleDay);
  const lessons = useAppSelector(selectLessons);
  const { isLoading, isError } = useGetScheduleByDayNumberQuery(selectedDay);

  const weekNumbers = FormatHelper.getCurrentWeekNumbers();

  return (
    <ContentBlock title="Schedule">
      <ScheduleNavigation daysOfWeek={daysOfWeek} weekNumbers={weekNumbers} />
      <div className={styles.list}>
        <ScheduleCardList isError={isError} isLoading={isLoading} lessons={lessons} />
      </div>
    </ContentBlock>
  );
};


export const scheduleAPI = api.injectEndpoints({
  endpoints: (build) => ({
    getScheduleByDayNumber: build.query<ISchedule[], string | undefined>({
      query: (dayNumber) => ({
        url: `/schedule`,
        params: {
          dayNumber,
        },
      }),
      async onQueryStarted(_, { dispatch, queryFulfilled }) {
        try {
          const result = await queryFulfilled;
          dispatch(setLessons(result.data[0].lessons || []));
        } catch (error) {
          console.error(error);
        }
      },
    }),
  }),
});

export const { useGetScheduleByDayNumberQuery } = scheduleAPI;

export const {
  endpoints: { getScheduleByDayNumber },
} = scheduleAPI;


Есть компонент ScheduleNavigation по сути это табы с номерами недели, при клике на таб я должен получать новые данные

1) Первая проблема: почему при клике с таба одного таба на другой не показывается скелетон, данные просто появляются если они есть
2) Вторая проблема: почему при клике с таба одного таба на другой если данных не приходит (404 status code) у меня остаются данные предидущего таба, не выводит ошибки.
3) Третья проблема кэширование: при клике с одного таба на другой и обратно выполняется повтороный запрос, кэширования нет

БУДУ ОЧЕНЬ БЛАГОДАРЕН ЕСЛИ ПОМОЖЕТЕ. Не могу найти инфы в инете вообще
  • Вопрос задан
  • 33 просмотра
Пригласить эксперта
Ответы на вопрос 1
@karminski
Senior React.JS Developer
По первой проблеме, есть isLoading, а есть isFetching.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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