试剂原子交换!将状态更改为键的所有值
Reagent atom swap! change state to all values from keys
我们有一个带有一些键和布尔值的原子:
(def btns (reagent.core/atom {:a true :b true :c true}))
我需要更改所有键的状态,如下所示:{:a false :b false :c false}
我试过了,但不是很好的解决方案,而且没有用:
(for [btn @btns]
(swap! btns assoc (key btn) false))
您可以通过这种方式更新多个密钥:
user> (def a (atom {:a true :b true :c true}))
;;=> #<Atom@af0fa6a: {:a true, :b true, :c true}>
user> (swap! a into {:b false :c false})
;;=> {:a true, :b false, :c false}
或者像这样:
user> (swap! a assoc :a false :c false)
;;=> {:a false, :b true, :c false}
如果你想将 atom 中的所有键都更新为 false,它也可以是这样的:
user> (reset! a (zipmap (keys @a) (repeat false)))
;;=> {:a false, :b false, :c false}
或者像这样:
user> (swap! a #(zipmap (keys %) (repeat false)))
;;=> {:a false, :b false, :c false}
更新
此外,最好将 util 函数抽象出来,使其更具可读性:
(defn assoc-all-keys [data val]
(zipmap (keys data) (repeat val)))
user> (swap! a assoc-all-keys false)
;;=> {:a false, :b false, :c false}
我们有一个带有一些键和布尔值的原子:
(def btns (reagent.core/atom {:a true :b true :c true}))
我需要更改所有键的状态,如下所示:{:a false :b false :c false}
我试过了,但不是很好的解决方案,而且没有用:
(for [btn @btns]
(swap! btns assoc (key btn) false))
您可以通过这种方式更新多个密钥:
user> (def a (atom {:a true :b true :c true}))
;;=> #<Atom@af0fa6a: {:a true, :b true, :c true}>
user> (swap! a into {:b false :c false})
;;=> {:a true, :b false, :c false}
或者像这样:
user> (swap! a assoc :a false :c false)
;;=> {:a false, :b true, :c false}
如果你想将 atom 中的所有键都更新为 false,它也可以是这样的:
user> (reset! a (zipmap (keys @a) (repeat false)))
;;=> {:a false, :b false, :c false}
或者像这样:
user> (swap! a #(zipmap (keys %) (repeat false)))
;;=> {:a false, :b false, :c false}
更新
此外,最好将 util 函数抽象出来,使其更具可读性:
(defn assoc-all-keys [data val]
(zipmap (keys data) (repeat val)))
user> (swap! a assoc-all-keys false)
;;=> {:a false, :b false, :c false}