【问题标题】:No view is being rendered in re-frame app重新框架应用程序中没有呈现视图
【发布时间】:2017-08-18 12:50:25
【问题描述】:

这是一个简单的 re-frame 应用程序,我尝试根据 re-frame 的 github repo 中的现有示例项目创建它。但它只显示 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")))

【问题讨论】:

  • 你用的是什么版本的re-frame?在最新的 .0 版本中引入了一个错误,并在不久后得到修复。
  • 我用的是最新的。问题已解决,我有一对导致问题的额外括号。谢谢。

标签: clojure clojurescript re-frame


【解决方案1】:

:rand 处理程序大多数时候会产生 nil,因为您将 2 加到生成的值上,而 participants 向量只有 3 个条目。

【讨论】:

  • 感谢您找出错误!它是在重构时引入的。我解决了这个问题,但仍然没有区别。
【解决方案2】:

这个问题是由于 deref 事物周围的一对额外括号引起的。所以函数winners-name 将其视为列表而不是整数。

(winners-name
  (@(rf/subscribe [:winner]))

【讨论】:

    猜你喜欢
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多