Почему мое второе значение OnClick Isloading не работает в запросе на мутацию RTK Query?

Почему мой второй вызов personDataSend set isLoading значения не работает в запросе мутации RTK Query? Когда вы делаете onClick в первый раз, isLoading является истиной, но при втором клике это не так, и при втором значении значение остается ложным.

const [
  getDriverLicenseByPin,
  { data, isLoading },
] = useLazyGetDriverLicenseByPinQuery();
  
const personDataSend = (values) => {
  getDriverLicenseByPin({
    pin: values.Pin,
    driverLicenseNumber: values.DriverLicenseNumber,
  });
};

🤔 А знаете ли вы, что...
JavaScript может выполняться как на стороне клиента (в браузере), так и на стороне сервера (с использованием Node.js).


1
66
2

Ответы:

RTK кэширует результат. Если вы хотите повторно получить данные, вам придется сначала аннулировать эту часть вашего магазина.

https://redux-toolkit.js.org/rtk-query/usage/automated-refetching


Решено

На самом деле запросы загружаются только один раз, например. когда данные еще не кэшированы. Вероятно, вы захотите использовать статус isFetching, который активен всякий раз, когда запрос активно извлекается.

См. использование LazyQuery:

type UseQueryStateResult<T> = {
  // Base query state
  originalArgs?: unknown // Arguments passed to the query
  data?: T // The latest returned result regardless of trigger arg, if present
  currentData?: T // The latest returned result for the trigger arg, if present
  error?: unknown // Error result if present
  requestId?: string // A string generated by RTK Query
  endpointName?: string // The name of the given endpoint for the query
  startedTimeStamp?: number // Timestamp for when the query was initiated
  fulfilledTimeStamp?: number // Timestamp for when the query was completed

  isUninitialized: false // Query has not started yet.
  isLoading: false // Query is currently loading for the first time. No data yet.
  isFetching: false // Query is currently fetching, but might have data from an earlier request.
  isSuccess: false // Query has data from a successful load.
  isError: false // Query is currently in an "error" state.
}

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

const [
  getDriverLicenseByPin,
  { data, isLoading: isLoadingData, isFetching },
] = useLazyGetDriverLicenseByPinQuery();

const isLoading = isLoadingData || isFetching;
  
const personDataSend = (values) => {
  getDriverLicenseByPin({
    pin: values.Pin,
    driverLicenseNumber: values.DriverLicenseNumber,
  });
};

Интересные вопросы для изучения