RTK-запрос нацелен на параметры, когда его следует пропустить

RTK-запрос принимает опцию skip для пропуска запроса, если эта опция истинна:

const {data} = useGetMyDataQuery(myParams, {skip: myCondition});

Я ожидаю, что пропуск проверяется до того, как он получит доступ к myParams, и пропущу запуск этого кода, когда он должен быть пропущен.

Например, в следующем коде я ожидаю, что функция не будет запущена, если myCondition истинно.

const getMyParams = () => params; 
const {data} = useGetMyDataQuery(getMyParams(), {skip: myCondition});

В этом примере я получаю параметры от объекта, который, возможно, не определен. Я пропускаю вызов, когда объект не определен, поэтому ожидаю, что код параметра запустится только при выполнении условия. Но это не так, и вы можете видеть, что при нажатии кнопки «Добавить пустой» выдается ошибка нулевого указателя.

Это нормальное поведение RTK-запроса или я что-то делаю не так?

🤔 А знаете ли вы, что...
React обеспечивает высокую производительность благодаря эффективной обработке изменений DOM.


124
1

Ответ:

Решено

Это не имеет ничего общего с RTK-запросом, так работает JavaScript.

useGetMyDataQuery — это функция, и аргументы оцениваются перед передачей в функцию. RTK Query ничего не знает о том, пишете ли вы там myParams или getMyParams() — он видит только окончательное значение.

Вместо этого вы можете использовать skipToken здесь:

import {skipToken} from '@reduxjs/toolkit/query'
const {data} = useGetMyDataQuery(myCondition ? skipToken : getMyParams());