在 ClojureScript 中使用帽子 (^) 字符

Use of the hat (^) character in ClojureScript

我对下面代码中帽子字符 (^) 的使用感到困惑,它已从 reagent-phonecat 中删除。

^{:key phone} [phone-component phone]

phone-component 本身是一个函数(但不会像在向量中那样被调用)并且 phone 将是一个带有 :battery 等键的映射。

我的 research^ 表示元数据或类型提示,但没有帮助!

这是文件:core.cljs

通过文件后,我可以看出 phone-component 是一个函数宏。

这个宏可以用来调用函数。宏接受 phone 键作为输入和 returns 有关 phone 的详细信息。

Link 可能会有一些帮助 http://java.ociweb.com/mark/clojure/article.html

首先确保您了解 key 在反应中的作用,因为试剂只是将其传递给 React:

http://facebook.github.io/react/docs/multiple-components.html#dynamic-children

[...] you can uniquely identify each child by assigning it a key:

[...]

When React reconciles the keyed children, it will ensure that any child with key will be reordered (instead of clobbered) or destroyed (instead of reused).

接下来,^{...} 构造只是 clojure 将元数据附加到下一个 表单:

http://clojure.org/reader#The%20Reader--Macro%20characters

注意:在本例中不是类型提示。这将需要一个 :tag 元数据密钥。

本例中的下一个形式是一个简单的向量 [..],其中您的第一个元素是对您要(最终)调用的组件的引用。

Reagent 采用数据结构(嵌套向量)并将生成虚拟 DOM 元素并将其传递给反应。它还会调用嵌套组件。

因此,试剂将读取您 return 的每个向量的元数据,并传递您指定要反应的任何 :key。这只是为了让 React 可以识别每次重新渲染中的元素。

因此,在您的情况下,phone 将作为密钥结束传递以做出反应。请注意,该键最终将作为反应元素的 DOM 属性中的字符串。所以最好传入一个不太长的字符串,以免弄乱你的 DOM 属性。