2

In the clojurescript re-frame todomvc application we find the following snippet in the todomvc.views namespace.

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

Although I have read the Clojure chapter on metadata I don't quite understand the purpose of:

^{:key

in the snippet above. Please explain.

4

2 回答 2

4

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

此元数据相当于放置:key在组件内。因此,例如,您所拥有的等同于:

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

使用元数据方法很方便,在某些情况下它必须比“传递给组件的道具中的第一个键”方法更容易。

这里有更多解释

于 2016-05-09T09:44:59.770 回答
1

^{:key (:id todo)} [todo-item todo]相当于(with-meta [todo-item todo] {:key (:id todo)}),请参阅 https://clojuredocs.org/clojure.core/with-meta

Reagent 使用它来生成带有密钥的相应反应组件。键帮助 React 识别哪些项目已更改、添加或删除。这是解释:https ://reactjs.org/docs/lists-and-keys.html

于 2021-09-08T21:59:46.213 回答