Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Можно тезисно про mobx, чем не устроил и если если переезжать, то на что?
местами не работали реакции
пришлось очень много эксперементировать с архитектурой сторов
если сильно полагаешься на реактивное програмирование, в виде постоянных реакций, очень тяжело дебажить код. А если в итоге начинаешь использовать только в @observable и @computed реактивность для обновления UI, стоит ли тогда вообще юзать для этого mobX
fetchData = async () => {
// Мы не можем выполнить эту функция и дернуть АПИ, потому что у нас есть зависимость, после получения данных от которой мы можем дергать нужную нам АПИшку
await when(() => myDependency.dataLoaded === true);
const someIds = myDependency.items.map(item => item.id);
await apiRequest.data({ids: someIds });
// ...
}
и прочие мелкие сомнения, про то что mobx это все таки черный ящик, которому ты должен доверять, в каком порядке он резолвит реакции, синхронно или асинхронно и все такое
setTimeout(() => {
configure({
reactionScheduler: f => {
setTimeout(f, 1);
}
});
}, 1);
Нужен конкретный кейс с кодом и ссылочку на codesandbox где эти реакции не работают. Чтобы любой мог это проверить и убедится в этом. Иначе любой может говорить все что угодно, например что у него react не рэднерит тэг img какое же это дно.
То, что вы описали тут, это не проблемы Mobx, Redux и т.п. Быть программистом и разрабатывать архитектурные решения никто не отменял. Нельзя просто взять какой-то инструмент и он сам по себе работает вне зависимости от того какое у вас приложение, как оно устроена и какая у него логика работы.
Для обновления ui и нужно использовать только @observable и @computed.
autorun и reaction это не прямые инструменты для обновления ui. И уж темболее никто вам не диктует и не навязывает использовать именно прям все реактивное при реактивное.
Есть ещё шикарная штука в MobX'e — when.
Вместо того чтобы думать и гадать что и как происходит и как все на все реагирует, может но это легко и быстро проверить. Вот пожалуйста исчерпывающий пример в котором явно все понятно:
А по поводу when, это не то чтобы шикарная штука, чуть не аккуратно расставишь их, и можешь наплодить кучу промисов, которые никогда не зарезолвятся
Дело в малом наличии бест практисов из-за малого комьюнити, в редаксе полно уже опробованных путей деления на модули пакеты и прочее, а тут надо набить все шишки
Как меня просили я тезисно описал, и в случае если есть большой интерес это действительно можно в отдельную статью холиварную вынести обсуждение с примерами и прочим
Я немного не к тому вел мысль, скорее хотел донести, если от mobx использовать, только 2 эти штуки для обновления UI, то нужен ли мне мобх вообще.
А что если у меня целое дерево реакций.
…
Проблему уже в том, что мы не всегда можем продгнозировать, в каком порядке вызовутся реакции.
Я понял, у вас все сводится к тому, что в асинхронном мире Javascript'a вы боретесь с асинхронностью и хотите всё максимально синхронно, т.к. асинхронность конкретно вам мешает, вставляет палки в колеса и делает все не предсказуемым и не прогнозируемым.
Ну как бы никто вам не говорит плохой код написать невозможно если использовать Mobx, с таким же успехом можно while(true) {} воткнуть и потом обвинять в этом JS, потому что в JS так можно сделать. Это же абсурд, не так ли?
Я использую EventEmitter вместо кучи reaction'ов, это банально проще контролировать и поддерживать. Но это не значит что я не использую reaction и autorun, ещё как использую, но нужно знать грань где лучше одно, а где другое.
Если бы поделились какими наработками, я был бы очень рад :)
По факту да) если я не могу гарантировать предсказуемость, как же я смогу пользователю гарантировать результат, по крайней мере эти две вещи кажутся связанными
И есть третий случай. А что, если пользователь мышкой поставил каретку на определенную позицию в тексте?
А что если пользователь на iPadOS и каретку перетаскивает пальцем?
В эмодзях на Windows нет флагов стран (точнее в качестве них используются пары букв), поэтому добавьте ещё один пункт в ТЗ:
— Заменять текстовые эмодзи на элементы <img /> с изображениями-полифилами.
Благодарю за подробную статью и разбор
Как мы разрабатывали поле ввода новых сообщений в нашем мессенджере (Gem4me)