#clojure #hiccup
#clojure #сбой
Вопрос:
Я не понимаю тег «:<>» в следующем коде clojure повторно создает todomvc
(defn todo-app
[]
[:<>
[:section#todoapp
[task-entry]
(when (seq @(subscribe [:todos]))
[task-list])
[footer-controls]]
[:footer#info
[:p "Double-click to edit a todo"]]])
Кто-нибудь может мне помочь в этом?
Комментарии:
1. В строке темы должен быть указан повторный кадр. Это не особенность стандартного hiccup.
2. Скорее реагент.
Ответ №1:
Это создает фрагмент реакции:
Комментарии:
1. Смотрите также документы по реагенту: github.com/reagent-project/reagent/blob/master/doc /…
Ответ №2:
Добавив немного больше деталей к предыдущему ответу, объект fragment
будет объединен в окружающий список вместо создания дочернего элемента. Таким образом, он похож на unquoted-splicing
оператор в Clojure ~@
по сравнению с обычным unquote
оператором ~
. Пример:
(defn middle-seq [] [ :d :e :f])
(defn middle-seq-frag [] [:<> :d :e :f])
При использовании для создания компонента реагента мы видим разницу:
[:a :b :c (middle-seq) :g :h :i] ;=> [:a :b :c [:d :e :f] :g :h :i]
[:a :b :c (middle-seq-frag) :g :h :i] ;=> [:a :b :c :d :e :f :g :h :i]
В противном случае вам пришлось бы реструктурировать ввод и использовать concat
:
(vec
(concat
[:a :b :c]
(middle-seq)
[:g :h :i] )) ;=> [:a :b :c :d :e :f :g :h :i]