Artur
Artur

Reputation: 2229

How to remove key/value from reagent atom vector?

I have a reagent atom which consists a vector of key/value maps.

How can I remove a key/value pair with certain key value which happens to be UUID? I have tried:

(swap! state/items (dissoc @state/items id))

but I get:

core.cljs:270 Uncaught Error: No protocol method IMap.-dissoc defined for type cljs.core/LazySeq: ({:id #uuid "e1f9341f-bc02-4c17-a594-b9b5ede72214", :description "foo bar"})

Upvotes: 1

Views: 655

Answers (1)

Chris Murphy
Chris Murphy

Reputation: 6509

I think you need to use remove. So this should help:

(def data  [{:id "e1f9341f-bc02-4c17-a594-b9b5ede72214" :description "Foo"} {:id "e1f9341f-bc02-4c17-a594-b9b5ede72214" :description "Bar"}] )
(remove #(= (:id %) "e1f9341f-bc02-4c17-a594-b9b5ede72214") data)
;; => ()

The swap! function takes the old value and returns the updated value. So data from above will be the old value. Your function you pass to swap! will thus look like this:

(fn [old]
  (remove #(= (:id %) "e1f9341f-bc02-4c17-a594-b9b5ede72214") old))

Upvotes: 2

Related Questions