Я новичок в clojure и реагент.Я пытался сгенерировать динамическое количество флажков, состояние которых хранится в состоянии приложения, которое представляет собой список слов, подобных этому
[{:checked false, :text "Sample text 1"} {:checked false, :text "Sample text 2"} {:checked false, :text "Sample text 3"}]
Ожидается, что приведенная ниже функция сгенерируетфлажок, соответствующий указанному индексу базы данных приложения (db
).Функция делает это, и флажки кликабельны.
(defn gen-checkbox [index db]
[re-com/checkbox
:label (:text (@db index))
:model (:checked (@db index))
:on-change #(swap! db assoc-in [index :checked] (not(:checked (@db index))))
])
Тем не менее, я получаю эту ошибку в консоли браузера, когда я нажимаю на любой флажок.
Uncaught Error: Assert failed: Reaction is read only; on-set is not allowed
Ошибка возникает в swap!
.Кто-нибудь может указать, что я делаю неправильно?
Часть инициализации БД выглядит следующим образом:
(re-frame/reg-event-db ::initialize-db
(fn [_ _]
(atom [{:checked false :text "Sample text"}, {:checked false :text "Sample text"}, {:checked false :text "Sample text"}])
))
У меня также есть функция для получения БД.Я сейчас получаю
(re-frame/reg-sub ::getdb
(fn [db]
@db
))