RTK-запрос принимает опцию skip
для пропуска запроса, если эта опция истинна:
const {data} = useGetMyDataQuery(myParams, {skip: myCondition});
Я ожидаю, что пропуск проверяется до того, как он получит доступ к myParams
, и пропущу запуск этого кода, когда он должен быть пропущен.
Например, в следующем коде я ожидаю, что функция не будет запущена, если myCondition
истинно.
const getMyParams = () => params;
const {data} = useGetMyDataQuery(getMyParams(), {skip: myCondition});
В этом примере я получаю параметры от объекта, который, возможно, не определен. Я пропускаю вызов, когда объект не определен, поэтому ожидаю, что код параметра запустится только при выполнении условия. Но это не так, и вы можете видеть, что при нажатии кнопки «Добавить пустой» выдается ошибка нулевого указателя.
Это нормальное поведение RTK-запроса или я что-то делаю не так?
🤔 А знаете ли вы, что...
React обеспечивает высокую производительность благодаря эффективной обработке изменений DOM.
Это не имеет ничего общего с RTK-запросом, так работает JavaScript.
useGetMyDataQuery
— это функция, и аргументы оцениваются перед передачей в функцию. RTK Query ничего не знает о том, пишете ли вы там myParams
или getMyParams()
— он видит только окончательное значение.
Вместо этого вы можете использовать skipToken
здесь:
import {skipToken} from '@reduxjs/toolkit/query'
const {data} = useGetMyDataQuery(myCondition ? skipToken : getMyParams());