«Это про вас, если...»

Знаете ли вы, что после отмены оплаты кнопка «Оплатить» всё ещё живая, а через минуту приходит письмо «заказ проведён»? Если это знакомо — у вас не баг в вёрстке, у вас просто нет модели долгого процесса.

Почему это важно: пользователь жмёт дважды — получаются дубли заказов. Экран закрылся, а запрос летит дальше и прилетает в размонтированный компонент. Таймаут срабатывает там, где его никто не ждёт, и молча ломает следующий шаг. Чтобы это прикрыть, появляются флаги disabled, очистка в useEffect и прочие костыли, которые держатся ровно до первого рефакторинга. Поддержка собирает тикеты «у меня зависла кнопка», а продукт теряет доверие. Хуже всего другое: такие гонки не падают в проде громко — они тихо портят данные, и вы узнаёте об этом через неделю из отчёта.

Я разбираю это в канале: как выглядит долгий процесс, у которого есть старт, отмена, таймаут и повторный запуск, и почему Redux Saga остаётся одним из самых честных способов это описать. А главный вопрос оставлю на следующий пост: что должно быть источником правды, когда экран уже закрыт, а процесс живёт?

Подписывайся, чтобы не пропустить разбор. А если хочешь разобраться в этом сразу и системно — курс «Web SPA и Redux Saga».