Получение ошибки Uncaught Ошибка: подтверждение не выполнено: реакция только для чтения;на съемочной площадке не допускается - PullRequest
0 голосов
/ 04 июня 2018

Я новичок в 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
   ))

1 Ответ

0 голосов
/ 04 июня 2018

Исходя из тегов вашего вопроса, я предполагаю, что вы используете ре-фрейм.

Вы не можете обновить базу данных в ре-фрейме напрямую .Вместо этого вам следует зарегистрировать обработчик событий, который обновляет базу данных, как показано ниже (точный код зависит от структуры вашей БД):

;; (require '[re-frame.core :as rf])

(rf/reg-event-db
 :toggle-checkbox
 (fn [db [_ index]]
   (update-in db [index :checked] not)))

и затем отправить событие в коде средства визуализации вашего флажка.:

...
:on-change #(rf/dispatch [:toggle-checkbox index])
...
...