# Понедельник 19 твитов
Всееем привет! С вами @art_al_ar: тимлид в @dbeaver_news.
На этой неделе, в основном, будем говорить о стейт-менед… twitter.com/i/web/status/1…
7:41Немного обо мне:
7:41Так же я веду t.me/web_conf_repor… где стараюсь публиковать все записи докладов по вебу и вообще стараюсь помога… twitter.com/i/web/status/1…
7:41Reatom - deterministic state manager! Весьма многообещающий проект, менеджер состояний с первоклассным выводом типо… twitter.com/i/web/status/1…
Совсем вкратце (запись длится час и это только первая часть) с темой недельного топика можно ознакомится вот так:
Reatom - deterministic state manager! Весьма многообещающий проект, менеджер состояний с первоклассным выводом типо… twitter.com/i/web/status/1…
7:45
Кстати, коллеги из open source, есть важный вопрос. Как и где Вы делаете логотипы для своих проектов? Хочется, что… twitter.com/i/web/status/1…
Я свой СТМ написал с 8ой попытки, а уж сколько названий пришлось перебрать и с каким трудом - жуть. Вот тут есть ст… twitter.com/i/web/status/1…
Кстати, коллеги из open source, есть важный вопрос. Как и где Вы делаете логотипы для своих проектов? Хочется, что… twitter.com/i/web/status/1…
10:15
Коллеги, я бы хотел плавно войти в тему в общем и не фокусироваться только на reatom, но т.к. уже начали поступать… twitter.com/i/web/status/1…
12:10Каким требованиям должен удовлетворять стейт-менеджер (СТМ) и вариативность каждого требования.
Сравнительная табли… twitter.com/i/web/status/1…
Что такое стейт-менеджер (СТМ), кто-нибудь видел определение? Откуда этот термин вообще взялся и за что отвечает?
(… twitter.com/i/web/status/1…
Стейт-менеджер, очевидно из названия, ответственен за управление каким-то состоянием, т.е. в нем описаны обстоятель… twitter.com/i/web/status/1…
16:44Это описание может быть реализовано разными способами:
16:44предподготовленные запросы можно разделить на:
16:44(способы переходов отсортированы от императивщены к декларативщене)
16:44Но это еще не все, практика подсказывает, что, помимо чтения и записи, необходимо реагировать на изменения и кмк им… twitter.com/i/web/status/1…
16:44Дело в том что самое сложное - это именно определение того что изменилось. Часто, в зависимости от того каким образ… twitter.com/i/web/status/1…
16:44Типы определения изменений:
16:44При этом библиотека может использовать те или иные типы в разных комбинациях или как-то частично. В рамках твиттера… twitter.com/i/web/status/1…
16:44Выше я вкратце, но на сколько возможно полно, описал то с чего СТМ начинается. Кажется, все уже достаточно не прост… twitter.com/i/web/status/1…
16:44Стейт-менеджер (СТМ) - это реактивная база данных.
16:44Может быть не совсем прямолинейный вывод, но в рамках твиттера остановимся на этом 👀
16:44# Среда 13 твитов
Ааа сегодня мы разберем зачем мемоизировать селекторы редакса и почему автору стейт-менеджера (СТМ) хорошо бы знать… twitter.com/i/web/status/1…
19:58Давайте представим следующую модель данных, в корзине товаров у нас отображаются:
19:58Все это, конечно, должно быть связано реактивно, как показано на рисунке (push-подход) - update обновляет только pr… twitter.com/i/web/status/1…
19:58Цветами разделены необходимые этапы, выполнение которых должно произойти при поступлении нового значения:
1. (зелен… twitter.com/i/web/status/1…
Классические реактивные подходы основанные на потоках (observable) с которым можно познакомится тут… twitter.com/i/web/status/1…
19:58Но с этим стандартным и столь распространенным подходом есть достаточно серьёзная проблема - glitches, одна сторона… twitter.com/i/web/status/1…
19:58На нашем примере стандартная последовательность оповещения observable будет выглядеть так:
update(1) ->
price(1)… twitter.com/i/web/status/1…
И тут мы видим что "cost" и "cost subscriber" были вызваны дважды, что содержит целых две проблемы: лишние вычислен… twitter.com/i/web/status/1…
19:58Так же не верным считается вызов сайд-эффектов (subscribers) в процессе вычисления зависимых значений , почему - ра… twitter.com/i/web/status/1…
19:58Правильный порядок обхода подписок должен был бы выглядеть так:
update ->
price ->
tax ->
cost (сразу с новыми… twitter.com/i/web/status/1…
Что бы достичь этого следует понимать что все зависимости - это определенный граф (DAG чаще всего… twitter.com/i/web/status/1…
19:58Либо обход, все же, может осуществляться в глубину, но со стороны subscribers (что бы контролировать получение, а н… twitter.com/i/web/status/1…
19:58Вот тут есть немного более детальное сравнение (в тестах) эффектора, мобыкса и Rx codesandbox.io/s/effector-com…
19:58# Четверг 24 твита
На нашем примере стандартная последовательность оповещения observable будет выглядеть так:update(1) ->
price(1)… twitter.com/i/web/status/1…
С формальной точки зрения описанная проблема называется проблемой ромбовидных зависимостей (eng. diamond problem) и… twitter.com/i/web/status/1…
На нашем примере стандартная последовательность оповещения observable будет выглядеть так:
update(1) ->
4:51
price(1)… twitter.com/i/web/status/1…
Я, к сожалению, не знаю литературы introduction уровня в которой бы это хорошо описывалось. Т.е. есть какие-то пейп… twitter.com/i/web/status/1…
4:51К счастью @theKashey только что опубликовал свой материал с разбором на конкретной практике, за что ему огромное сп… twitter.com/i/web/status/1…
4:51@jsunderhood Автор затронул хорошую тему, но почему-то не упомянул инструменты, с помощью которых можно реализовыва… twitter.com/i/web/status/1…
Упомянул :) twitter.com/jsunderhood/st…
pull подход становится все менее эффективным и даже накладным с ростом количест… twitter.com/i/web/status/1…
@jsunderhood Автор затронул хорошую тему, но почему-то не упомянул инструменты, с помощью которых можно реализовыва… twitter.com/i/web/status/1…
7:24
При этом в push подходе все наоборот: мы медленно инициализируемся перестраивая (сортируя) граф под каждый апдейт, … twitter.com/i/web/status/1…
7:24В продолжении треда @roman01la
MobX вообще хитро работает: он подписывается (push) только на то чей кеш был инвали… twitter.com/i/web/status/1…
Второй выпуск подкаста про Reatom (современный state manager на TypeScript): сравниваем с MobX, обсуждаем производи… twitter.com/i/web/status/1…9:22
О, что-то свежее (и большое) про react zombie children
kaihao.dev/posts/Stale-pr…
Это крайне не приятная проблема появ… twitter.com/i/web/status/1…
Немного сложно объяснять, почитайте статью, или посмотрите вот этот доклад: youtube.com/watch?v=cRtAjT…
Там достаточно… twitter.com/i/web/status/1…
Пришло время обсудить обработку ошибок 🔥🧨🎆🌋☄️🌡️
Я еще в начале недели кидал ссылку в которой описаны некоторые иде… twitter.com/i/web/status/1…
17:38Вернемся к нашей корзине с товарами и подумаем где могут возникнуть ошибки при работе стейт-менеджера (СТМ) и что с… twitter.com/i/web/status/1…
17:38Для каждого пункта, при ошибке, возникают вопросы:
17:38Ну т.е. все сложно...
Вообще лучше всего когда в СТМ *по умолчанию* заложена такая логика обработки ошибок, которая… twitter.com/i/web/status/1…
Что такое сайд-эффект? Это какой-то эффект, который находится в стороне, в не ореола нашего контроля. Сайд-эффект -… twitter.com/i/web/status/1…
17:38На самом деле, с точки зрения разработчика, сайд-эффектов в приложении может вообще не быть, потому что в его руках… twitter.com/i/web/status/1…
17:38Но нам необходимо рассмотреть зону ответственности СТМ, который, конечно, вообще ничего не знает про свое окружение… twitter.com/i/web/status/1…
17:38Соответственно какое есть влияние у СТМ на окружающую среду (я не про патчинг протатипов 😁)? - Состояние и подписчи… twitter.com/i/web/status/1…
17:38Причем в реальном приложении связей "изменение - вызов подписчика" так много, что проконтролировать каждое и, возвр… twitter.com/i/web/status/1…
17:38В итоге, СТМ имеет возможность внести непредсказуемое поведение в приложение двумя способами: изменить состояние не… twitter.com/i/web/status/1…
17:38Что бы избежать неконсистентности данных для иммутабельной модели - необходимо использовать rollback'и, либо исполь… twitter.com/i/web/status/1…
17:38У протестированных мной СТМ: redux, MobX, effector есть одна и та же проблема - возможны ситуации когда состояние… twitter.com/i/web/status/1…
17:38Reatom задизайнен так, что там никогда не произойдет частичного изменения состояния: либо полное изменение соответс… twitter.com/i/web/status/1…
17:38При этом, подчеркиваю, я описал необходимое поведение по умолчанию. В идеале библиотека должна так же предоставлять… twitter.com/i/web/status/1…
17:38Выводы такие: стейт-менеджемент - это сложно, имеется множество подводных камней (мы разобрали только часть) с кото… twitter.com/i/web/status/1…
17:38# Ссылки
other
- https://t.me/web_conf_reports
- https://artalar.github.io/reatom/#/glossary?id=action-reactions
- https://artalar.github.io/reatom/
- https://github.com/artalar/pathon
- https://codesandbox.io/s/effector-comparison-r9qy2
- https://kaihao.dev/posts/Stale-props-and-zombie-children-in-Redux
- https://www.youtube.com/watch?v=cRtAjTFM7M4