🔥

Тред (Сергей Сова)


Давайте попробуем старую практику как мир: лайк этому посту от вас, факт про эффектор, его историю и концепции от меня. Посмотрим насколько меня хватит!

Изначально effector был миддлварой для ридакса и разрабатывался для высоконагруженного клиента реалтайм чата, вроде Телеграм.

Пока флоу не умер, имелась его первоклассная поддержка. Сейчас типы затачиваются под TypeScript.

Flow и Reason остались для поддержки обратной совместимости.

Команда effector очень щепетильно относится к своим пользователям. Не выкатывая мажорных версий с кучей несовместимых изменений.

Все новые фичи добавляются в минорных версиях. Мажорные версии только удаляют устаревшие методы. Мажор выход раз в год. Вот скоро будет 21 версия

Русскоязычный чат в Телеграм ждет ваших вопросов и предложений. Удивительно, но у эффектора есть пользователи по всему миру, хоть и не так много. t.me/effector_ru

Эффектор занимается обработкой данных, а не жонглированием декораторами, стримами, пропсами и мемоизацией. Всё в его API нацелено на данные

Во времена первых версий требовался инструмент, позволяющий управлять данными в сложных приложениях без опасности раздуть монолитный центральный стор, с явным control flow, нормальной типизацией и емким API

Сторы для приложения должны быть лёгкими, насколько это возможно — не должна пугать мысль о том, что нужно добавить ещё один стор для конкретных нужд

Сторы должны свободно совмещаться — идея в том, что данные, которые потребуются приложению, можно распределить статически, заранее показав как данные будут преобразоваться во время работы приложения

Принцип работы должен by design исключать необходимость в reselect, оповещая об изменениях только тех, кому они необходимы.

Это позволяет не задумываться о том, что у тебя будет триггериться всё приложение если ты захочешь вынести стейт модалки из реакта. По совместительству это означает что приложения избавлены от проблем с перфомансом, возникшим у react-redux при переходе на контекст

Возможность, место, и способ вынести любую требуемую бизнес-логику из view, максимально упрощая компоненты

Независимость от спорных концепций — никаких декораторов, никаких зависимостей от реакта/rxjs либо необходимости юзать классы или прокси

Ничего из этого не требуется для управления состоянием приложения и поэтому апи библиотеки использует только функции и простые js объекты

Предсказуемость API — небольшое число базовых принципов переиспользуются в различных кейсах, снижая нагрузку на юзера и повышая узнаваемость. зная как работает .watch в эвентах, можно догадаться, что делает функция .watch у стора.

Те же базовые принципы позволяют построить вокруг эффектора дополнительные библиотеки методов, не снижая очевидности кода. Например, patronum. Это явный показатель хорошей расширяемости

Приложение строится из комбинации базовых элементов и возможности строить новые.

Нет никакого смысла стремиться выдать всё за стрим, за редьюсер или за обсервабл, в приложении требуются они все, и библиотека предлагает решение чтобы управлять структурой данных, а не скрывать её

Отличие эффектора от контекста, и разница с внутриреактовыми сторами сводятся к одному: зонам ответственности.

Концепция реакта подразумевает, что фронтенд-разработчики — это части гигантского организма, в котором всё предопределяется наверху, а разработчики могут максимум лишь реагировать (reacts) на то, что им свалилось сверху на этот раз, не имея ни малейшего шанса повлиять на это

Вся концепция эффектора предполагает, что мы сами решаем, что и когда мы отображаем, и каким образом обрабатываем — при этом решаем сразу, заранее, избегая ситуативных субоптимальных решений.

Метод sample взял свое название из микроэлектроники. Гуглить «сэмплирование сигнала». Назначение: взять данные из стора по событию и переслать.

Эффектор предполагает, что все редюссеры чистые. Почитать про чистоту effector.now.sh/docs/glossary

Для асинхронных вычислений имеется отдельный контейнер — Эффект. Называется так, потому что его нужно использовать еще и для локализации сайд-эффектов.

20 и 21 версия вовсе не означает, что эффектор прошел столько мажорных обновлений. На самом деле, два года разработка шла до 0.18. А затем 19.0 без изменений вообще github.com/zerobias/effec…

Типы тестируются не привычным для всех способом — с помощью снапшотов сохраняется реакция системы типов на код. Таким образом можно легко проверить новую версию тс или эффектора github.com/zerobias/effec…

Уже несколько лет автор разрабатывает Effector full-time на пожертвования и помощь сообщества. Призываю закинуть $5-10 в месяц для развития такого мощного инструмента. patreon.com/zero_bias

В качестве основ для концепций эффектора использовался Лисп. Но больше как теория, а не фактические решения. …ias-papers.s3-eu-west-1.amazonaws.com/interlisp-vm.p…

Я заметил тенденцию в Телеграм сообществе. Все неудачные решения тяжело реализовать на Effector. При этом хорошие продуманные кейсы, достаточно просто реализуются. Считаю, что Effector стимулирует продумывать предметную область

Это определенно очень круто! Столько желающих. Но это сильно больше, чем мое воображение и память способны выдать за ограниченное время! Огромное спасибо всем, за лайки и вопросы.

Я отвечу на все оставшиеся вопросы со своего аккаунта. А также постараюсь добить тред фактами. Начнем новый тред про архитектуру? Подписывайтесь @_sergeysova