Идиоматический способ обработки динамических классов в приложении Reagent или Re-Frame

В JavaScript распространенным способом обработки динамических классов является использование библиотеки имен классов.

Я не смог найти никаких альтернативных решений для ClojureScript, и кажется, что большинство людей в порядке с использованием встроенных операторов if (str ...) лайк:

(str "location flex-column border-box" (if is-current " current"))

что мне кажется хрупким и утомительным (см. управление пространством).

Я ожидаю, что эта функция будет работать так:

(class-names {
  :location true
  :flex-column true
  :border-box true
  :current is-current
})
; -> "location flex-column border-box"
; or "location flex-column border-box current"

Или как

(class-names "location" "flex-column" "border-box" {
  :current is-current
})

Конечно, написание такой функции вручную не должно быть трудным, но я подумал, что это уже должно быть как-то решено.

1 ответ

Библиотека JavaScript базовых имен классов со всеми ее оптимизациями производительности доступна через cljsjs: https://github.com/cljsjs/packages/blob/master/classnames/README.md

Другие вопросы по тегам