【问题标题】:Why is the ^ character used in this ClojureScript snippet?为什么这个 ClojureScript 片段中使用了 ^ 字符?
【发布时间】:2016-05-09 09:21:36
【问题描述】:

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

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

虽然我已经阅读了 metadata 上的 Clojure 章节,但我不太明白这样做的目的:

^{:key

在上面的sn-p中。请解释一下。

【问题讨论】:

    标签: clojure clojurescript re-frame


    【解决方案1】:

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

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

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

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

    这里有更多explanation

    【讨论】:

    • re-frame 的作者也很有趣! - 刚刚在 Reagent 教程中找到它......“ 在这个简单的示例中,上面的 ^{:key item} 部分并不是真正需要的,但是为动态生成的组件列表中的每个项目附加一个唯一的键是很好的做法,并且帮助 React 提高大型列表的性能。"
    【解决方案2】:

    ^{: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

    【讨论】:

      猜你喜欢
      • 2016-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-11
      • 1970-01-01
      相关资源
      最近更新 更多