В форме главное — описание того, что она редактирует. Не важно, как выглядят поля ввода и как они располагаются. Не важно, на каком языке написана форма. Не важно и как данные валидируются, как, где и когда отображаются ошибки. Важно лишь то, какие поля каких типов и как редактируются.
Поэтому форм-фреймворк моей мечты — это не библиотека визуальных компонентов (как material-ui или antd), не стейт-менеджер / валидатор (как redux-form, formik или react-hook-form), но набор продуманных контрактов для связи этих реализаций.
В моём представлении форм-фреймворк содержит следующие механизмы:
— конвейер трансформации описаний полей (преобразует описания полей более высокого уровня в описания полей более низкого уровня)
— терминальные модули (отвечают за рендеринг полей)
— менеджер расположения (абстрактный интерфейс, реализовав который, дизайнер может управлять внешним видом формы, а может и не управлять, просто выбрав готовую библиотечную реализацию)
— реестр модулей (разрешает символические имена в конкретные реализации модулей терминалов, трансформаций и расположения)
Остальное — стейт, валидация, персистентность и т.д. — это к форме не относится. Это задачи программного окружения.