Я пытаюсь создать вид списка задач с помощью ClojureScript и инфраструктуры реагентов.Я определил состояние приложения как атом:
(def app-state
(r/atom
{:count 3
:todolist
[{:id 0 :text "Start learning mindcontrol" :finished true}
{:id 1 :text "Read a book 'Debugging JS in IE11 without pain'" :finished false}
{:id 2 :text "Become invisible for a while" :finished false}]}))
Имею функцию для обновления списка задач:
(defn update-todolist [f & args]
(apply swap! app-state update-in [:todolist] f args))
И функцию переключения todo:
(defn toggle-todo [todo]
(update-todolist update-in [2] assoc :finished true))
Здесь я 'Я прямо сейчас обновляю векторный элемент по его индексу.
Я рендую каждый элемент с помощью этой функции:
(defn item [todo]
^{:key (:id todo)}
[:div
[:span {:class "item-text"} (:text todo)]
[:i {:class (str "ti-check " (if (:finished todo) "checked" "unchecked"))
:on-click #(toggle-todo (assoc todo :finished true))}]])
Здесь я передаю обновленную задачу, но не всегда правильно передаватьправда.Вероятно, этого будет достаточно, чтобы передать его индекс, и это решит мою проблему, но я понятия не имею, как это сделать.