В приложении перекадровки не отображается ни один вид

Вот простое приложение 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 записи.

Другие вопросы по тегам