Какую же атомарность не поддерживает mobx? Речь о том что после того как компютед-атом выбросит ошибку то будет неконсистентность в приложении (например какие-то атомы уже пересчитались с новым значением а какие-то нет) ? Ну ок, и что ты предлагаешь делать? Прежде всего выбрасывание ошибки в computed-атоме это баг приложения и такого быть не должно потому что computed должен быть чистой функцией (так как это просто derived-state). Я в этом случае поставил бы враппер который отсылал ошибку в sentry и полностью перезагружал бы страницу после отображения попапа с ошибкой.
Ок, допустим страницу перезагружать неудобно и хочется пометить отдельный компонент как ошибочный но при этом сохранить консистентность остального состояния. Тогда я не вижу что мешает вместо перезагрузки страницы сбросить состояние всех computed-атомов в случае ошибки через какой-нибудь враппер поверх создания computed()-атомов в мобиксе. То есть hoc поверх компонента через try-catch детектит ошибку компютед-атома а дальше он сбрасывает (или пересоздает) все компютед атомы которые есть в приложении и вызывает перерендер всего приложения. Тогда компютед-атомы снова пересчитаются а компонент который затрекал ошибку будет теперь отображать view-ошибки вместо чтения ошибочного компютед-атома и тот уже не будет вызываться и не будет выбрасывать ошибку
полностью перезагружал бы страницу
- это очень плохой паттерн, нужно всегда стараться сохранить последний валидный стейт, отображаемый пользователю, потому что там могут быть важные для него данные (которые он сам внес или до которых он не сразу дошел, типа 15 страница в таблице после 5+ фильтров)
сбросить состояние всех computed-атомов через какой-нибудь враппер
- вот я предполагаю что это поведение по умолчанию, поэтому делаю как делаю