169 похожих чатов

Всем привет! Вопрос адептам Apollo graphql (+ react) Кейс: apollo server для

сфейленных запросов отвечает человекочитаемыми ошибками на клиент, а на клиенте хочется выводить сфейленные ответы в нотификации.

Начал решать задачу “в лоб” - на клиенте, там, где дергаю запрос, разбирать ответ, проверять пустой ли error, и, если не пустой, вызывать с error хук, который показывает нотифайку.
Что-то вроде

const { data, error } = useSomeExampleQuery({ variables: ... })
useServerErrorToToast(error)

То есть бойлерплейт вокруг каждого запроса. Но этот бойлерплейт можно по идее спрятать в какую-нибудь обертку.

Потом начал копать в сторону более изящных решений и нашел подход через линки
https://www.apollographql.com/docs/react/data/error-handling/#advanced-error-handling-with-apollo-link -
можно выводить нотификацию на каждую пришедшую ошибку прямо из линка, не разбирая каждый результат запроса вручную.
Но в этом подходе есть нюанс - часть запросов работает в режиме поллинга, и, если одна и та же ошибка приходит 5 перезапросов подряд, юзер увидит 5 отдельных нотификаций об ошибке. В целом то логика правильная, но с точки зрения UX не очень, хотелось бы этого избежать.
В этом плане подход “в лоб” для поллинговых запросов лучше, так как хук для нотификации выкупит, что пришла та же ошибка и показывать нотифайку лишний раз не будет.

Подумал про гибридный подход - научить линк понимать, что ошибка пришла на единичный запрос (выкидывать нотификацию), или поллинговый (не выкидывать нотификацию, обработать отдельно, как в варианте в “лоб”). Но, как я понял, это можно сделать только костылями.

Другой вариант - городить какой-то специальный стор для линка с последними сфейленными попытками, кажется совсем плохой идеей.

Есть какие-то мысли? Может кто-то сталкивался?

1 ответов

32 просмотра

У меня подход с обертками. В линке только обработка ошибок аутентификации. Я использую codegen, который оборачивает хуки useQuery, useMutation с дефолтной обработкой ошибок + возможностью кастомизировать ошибки при вызове хука. Квери выводят нотификации ошибок с мемоизацией. Мутации выводят нотификации ошибки и об успешном выполнении мутации. При этом разработчик может переопределить это поведение в своих компонентах, когда вызывает хуки. конфиг кодгена https://github.com/nodkz/example-apollo3/blob/master/codegen.yml#L38 пример оберток аполовских хуков https://github.com/nodkz/example-apollo3/blob/master/src/utils/extendApolloHooks.ts

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

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта