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 ответов

29 просмотров

У меня подход с обертками. В линке только обработка ошибок аутентификации. Я использую 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

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

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

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
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
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта