问题描述
我不理解以下代码中的标记“:” clojure re-frame 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"]]])
有人可以帮我吗?
解决方法
正在创建一个React片段:
https://reactjs.org/docs/fragments.html
,在前面的答案中添加了更多细节,fragment
被拼接到周围的列表中,而不是创建子元素。这样,与常规unquoted-splicing
运算符~@
相比,它类似于Clojure unquote
中的~
运算符。一个例子:
(defn middle-seq [] [ :d :e :f])
(defn middle-seq-frag [] [:<> :d :e :f])
当用于创建Reagent组件时,我们看到了区别:
[: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]