从重新框架开始并有一个(可能非常基本的)混淆点。
我订阅了:
(defn get-vote-by-id
[votes id]
(filterv #(= (:id %) id) votes))
(register-sub
:cvs
(fn cvs-sub [db [_]]
(make-reaction
(fn cvs-sub-reaction []
(let [cv (get-in @db [:current-vote])
votes (get-in @db [:votes])]
;; why is this evaluating to []?
(get-vote-by-id votes cv))))))
使用此Form-2组件:
(defn vote-page []
(let [ready? (subscribe [:current-vote-initialised?])
current-vote-id (subscribe [:current-vote-id-sub])
cv (subscribe [:cvs])]
(fn vote-page-renderer []
[:div
[:h2 "Vote"]
(if @ready?
(do
[:div
[:div (str "cv: " @cv)]
[:div (str "Current Vote id: " @current-vote-id)]])
[:div "Initialising..."])])))
我的app-db有有效数据,{:votes ...是地图矢量,每张地图都有:id参数,{:current-vote是一个数字。
我知道get-vote-by-id有效:
(get-vote-by-id [{:id 1 :data "hi"} {:id 2 :data "there"}] 2)
[{:id 2, :data "there"}]
如果我用一个常量:(get-vote-by-id votes 2)替换cv(get-vote-by-id votes cv),那么它就可以了。但除此之外,(get-vote-by-id ...)正在评估空向量[]。
任何帮助表示赞赏,并提前致谢!
这表明get-vote-by-id传递正确的值(投票的矢量和id的数字):
答案 0 :(得分:2)
经过一些调试后,我们发现问题还在上游。根本原因是id
被设置为字符串。将id
强制转换为整数解决了问题。