Идиоматический способ обработки динамических классов в приложении 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