Что такое: сбой в реагенте?

#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:

Это создает фрагмент реакции:

https://reactjs.org/docs/fragments.html

Комментарии:

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]