В приложении перекадровки не отображается ни один вид
Вот простое приложение re-frame, которое я попытался создать на основе существующего примера проекта в репозитории re-frame github. Но это только отображение вещей из файла html. Похоже, ни одно событие не отправляется. Кто-нибудь может указать, что я делаю не так? Благодарю.
(ns simple.core
(:require [reagent.core :as reagent]
[re-frame.core :as rf]
[clojure.string :as str]))
(rf/reg-event-db
:rand
(fn [db [_ _]]
(assoc db :winner ( + 2 (rand-int 3)))))
(rf/reg-sub
:winner
(fn [db _]
(:winner db)))
(def participants ["Alice" "Bob" "Ellie"])
(defn winners-name
[idx]
(get participants idx))
(defn show-winner
[]
[:h1
(winners-name
(@(rf/subscribe [:winner])))])
(defn ui
[]
[:div
[:h1 "Lottery"]
[show-winner]])
(defn ^:export run
[]
(rf/dispatch-sync [:rand])
(reagent/render [ui]
(js/document.getElementById "app")))
2 ответа
Решение
Проблема вызвана из-за пары дополнительных скобок вокруг deref
вещь. Так что функция winners-name
обрабатывает его как список, а не целое число.
(winners-name
(@(rf/subscribe [:winner]))
:rand
обработчик будет выдавать ноль в большинстве случаев, так как вы добавляете 2 к сгенерированному значению и participants
вектор имеет только 3 записи.