Могу ли я использовать перехватчики React внутри условного оператора?

Нет.

я не знаюПочемутехнически, но это невозможно.

Я наткнулся на это при работе с SWR и в частности сuseSWRкрюк.

const ({ data } = useSWR(`/api/user`, fetcher)

Я хотел получить только некоторые данные из API, когда пользователь вошел в систему, и подумал: «Хорошо, я могу это сделать»:

let data

if (loggedIn) { ;({ data } = useSWR(/api/user, fetcher) }

но нет.

React вызовет ошибки в консоли, возможно, ошибку следующего содержания:

Предупреждение: React обнаружил изменение порядка хуков, вызываемых курсом. Если не исправить, это приведет к ошибкам и ошибкам.

Решение будет отличаться в зависимости от используемого крючка. В этом случае очень быстрое и эффективное решение было предложено компаниейuseSWRкрючок, потому что я мог пройтиnullвместо конечной точки API, чтобы избежать загрузки данных:

const ({ data } = useSWR(loggedIn ? `/api/user` : null, fetcher)

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

Скачать мою бесплатнуюСправочник по React


Больше руководств по реакции: