Функция состояния и действия - это функция, которая принимает два аргумента: состояние и действие.

Подобные функции очень распространены в экосистеме JavaScript. Например, функция-редуктор, используемая для создания хранилища Redux, - это функция, которая принимает текущее состояние и какое-то действие и не возвращает ничего, кроме нового состояния. функцию рендеринга из React также можно рассматривать как функцию состояния и неявное RENDER действие, которое возвращает представление и не меняет состояние. Таким образом, основы React и Redux можно свести к написанию функций состояния и действия, которые возвращают новое состояние и некоторый результат.

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

Rosmaro - это JavaScript-фреймворк для написания функций состояния и действия. Вместо использования только одной модели (например, пар ключ-значение) для выражения всего состояния, он проводит черту между связанными с данными состояние и состояние, связанное с поведением с использованием конечных автоматов.

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

Графический файл представляет собой удобочитаемый JSON-файл, поэтому он может быть написан вручную. Однако гораздо интереснее использовать визуальный редактор Rosmaro, который превращает Rosmaro в среду визуального программирования.

Фреймворк функциональный и стоит на плечах таких гигантов, как Redux Saga и Redux, что дает доступ ко всем инструментам, которые мы знаем и любим. Отладка в путешествиях во времени очень проста, даже когда задействованы асинхронные действия.

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

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

Селекторы, известные нам по Redux, - прекрасный способ использовать узкие части состояния. Код, работающий с ним, может предполагать, что ему будет дано именно то, что он ожидает, в точном формате, который он ожидает. Rosmaro делает еще один шаг вперед и, используя линзы Ramda, позволяет не только потреблять, но и изменять узкую часть состояния, связанного с данными.

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

Не сражайтесь с логическими флагами! Нарисуйте изменения в поведении!

Первоначально опубликовано на lukaszmakuch.pl.