Om когда ClojureScript встречает React

17 Aug, 2020

Репозиторий давно не обновлялся

Последнее обновление было 5 лет назад.

Помните времена, когда React только начинал завоевывать мир фронтенда? В 2013 году на свет появился Om — попытка объединить мощь ClojureScript с виртуальным DOM от Facebook. Хотя проект больше не разрабатывается (автор рекомендует смотреть в сторону Fulcro), он оставил заметный след в экосистеме и до сих пор может быть интересен для изучения.

Что такое Om?

Om — это UI-фреймворк для ClojureScript, построенный поверх React. Его главная «фишка» — не просто предоставить ClojureScript-обертку для React, а переосмыслить подход к управлению состоянием приложения.

Представьте, что вам нужно:

  • Снимки состояния приложения (snapshots)
  • Отмена изменений (undo)
  • Синхронизация клиент-серверного состояния

В традиционных фреймворках это требует тонны кода. Om же предлагает эти возможности «из коробки» с минимальными накладными расходами.

Ключевые особенности

  1. Неизменяемое состояние Как и положено в мире Clojure, Om использует immutable-структуры данных, что упрощает отладку и предсказуемость приложения.

  2. Вдохновение от больших игроков Автор Дэвид Нолен заимствовал идеи из:

    • Facebook Relay (для клиент-серверного взаимодействия)
    • Netflix Falcor (для управления данными)
    • Datomic (pull-синтаксис для запросов)
  3. Минимум boilerplate-кода Вот как выглядит простой компонент:

    (defui Hello
      Object
      (render [this]
        (dom/h1 nil "Hello, world!")))
    
  4. Гибкая архитектура Om не навязывает строгой структуры приложения, позволяя масштабировать проект по мере необходимости.

Технические детали

Под капотом Om использует:

  • ClojureScript для компиляции в JavaScript
  • React для рендеринга UI
  • Собственную реализацию управления состоянием

В отличие от pure React, Om предлагает более декларативный подход к описанию компонентов и их поведения.

Практическое применение

Хотя Om не получил widespread-принятия, он хорошо подходит для:

  • SPA с комплексным состоянием
  • Приложений, требующих механизмов undo/redo
  • Проектов, где уже используется Clojure/ClojureScript

Стоит ли изучать Om в 2023+?

Прямо сейчас внедрять Om в новый проект — спорное решение (автор сам рекомендует Fulcro). Но если вы:

  • Изучаете ClojureScript экосистему
  • Хотите понять эволюцию идей в клиентских фреймворках
  • Ищете вдохновение для собственных решений

тогда копание в Om может быть весьма познавательным. Это как изучать историю архитектуры — вы не будете строить пирамиды, но понимание их устройства делает вас лучше как инженера.

Что дальше?

Если Om вас заинтересовал:

  1. Посмотрите Quick Start tutorial
  2. Изучите документацию
  3. Для production-проектов рассмотрите Fulcro

Какой фреймворк вы бы выбрали для ClojureScript-проекта сегодня? Делитесь опытом в комментариях!