为什么在这个 ClojureScript 片段中使用 ^ 字符?

Why is the ^ character used in this ClojureScript snippet?

在 clojurescript re-frame todomvc 应用程序中,我们在 todomvc.views 命名空间中找到以下代码段。

(defn todo-list
  [visible-todos]
  [:ul.todo-list
   (for [todo  @visible-todos]
     ^{:key (:id todo)} [todo-item todo])])

虽然我已经阅读了关于metadata的Clojure章节,但我不太明白其目的:

^{:key

在上面的代码片段中。请解释。

当你有很多项目时,:key 是 React 所需要的,以便它们在组内是唯一的。但是最新版本的 React 不需要这些密钥。因此,如果您使用最新版本的 reframe / Reagent,请尝试不使用 :key 元数据。

此元数据等同于将 :key 放入组件中。因此,例如,您拥有的等同于:

[todo-item {:key (:id todo)} todo]

使用元数据方法很方便,在某些情况下肯定比 'first key in props passed to the component' 方法更容易。

还有更多

^{:key (:id todo)} [todo-item todo] 等同于 (with-meta [todo-item todo] {:key (:id todo)}),参见 https://clojuredocs.org/clojure.core/with-meta

Reagent就是用这个来生成对应的带key的react组件。键帮助 React 识别哪些项目已更改、添加或删除。这是解释:https://reactjs.org/docs/lists-and-keys.html