如何用Clojure中的映射向量更新试剂原子

时间:2015-11-22 11:39:59

标签: clojure swap reagent

假设我有一个带有这样的地图矢量的试剂原子:

(def my-atom (reagent/atom [{:id 1 :name "first name"}
                            {:id 2 :name "second name"}]))

如何将某个向量索引处的键值更新为:

[{:id 1 :name "first name"}
 {:id 2 :name "UPDATED second name"}]

我正在寻找像(update-my-atom 1 :name "UPDATED second name")这样的函数:

(defn update-my-atom
  [vector-index key new-value]
  (swap! ??? - ???)

1 个答案:

答案 0 :(得分:2)

assoc-in适用于任何关联结构嵌套,包括向量*内的映射。因此,我建议swap!使用assoc-in

  (swap! my-atom assoc-in [vector-index key] new-value)

*:与update-in一样,如果您想使用旧值的函数而不是“这是新值”。