Clojurescript 如何在同一事件处理程序中调用re-frame.core/dispatch和re-frame.core/subscribe
例如:Clojurescript 如何在同一事件处理程序中调用re-frame.core/dispatch和re-frame.core/subscribe,clojurescript,reagent,re-frame,Clojurescript,Reagent,Re Frame,例如: (defn starrating [] (reagent/create-class {:reagent-render (fn [] [:div [:input {:type "checkbox" :on-click #(do (re-frame/dispatch [:set-star-rating
(defn starrating []
(reagent/create-class
{:reagent-render
(fn []
[:div
[:input {:type "checkbox"
:on-click #(do (re-frame/dispatch
[:set-star-rating
(-> % .-target .-checked)])
(get-data-from-server))}]])}))
(defn get-data-from-server []
(let [star (re-frame/subscribe [:star-rating])]
(ajax/GET (str "http://192.168.0.117:8080/json/searchhotels.json"
"?star=" @star)
{:response-format :json
:keywords? true
:handler success-handler
:error-handler error-handler})))
在上述示例中,未设置复选框
勾选复选框时,星形变量设置为true
但在此之后,当我们调用subscribe以获取star中的值时,它返回的是以前的值,即false
它将呼吁:
取消选中该复选框时,请求将变为
为什么re-frame.core/subscribe返回以前的设置值?re-frame有一个数据周期:db->subscriptions->view->dispatch events->db。这是这里最重要的一点
- 尝试使用app db的订阅在“
中设置复选框值,以便数据从app db流入您的视图李>开始”
- 还可以尝试将
放在事件处理程序中,这样您的视图就不会处理所有的查询机制,而只是调度事件,而不知道响应事件需要发生什么get data from server
关于这一点,有很多很好的文档,它们都有一个数据循环:db->subscriptions->view->dispatch events->db。这是这里最重要的一点
- 尝试使用app db的订阅在“
中设置复选框值,以便数据从app db流入您的视图李>开始”
- 还可以尝试将
放在事件处理程序中,这样您的视图就不会处理所有的查询机制,而只是调度事件,而不知道响应事件需要发生什么get data from server
这方面有很多很好的文档订阅是用于试剂成分的反应 调度是异步的。如果希望同步,请使用dispatch sync 研究如何在保持事件处理程序为纯函数的同时进行ajax调用
阅读文档,re frame有非常好的文档。github中的Readme.md。查看存储库中的示例应用程序以获取示例。订阅是指与试剂成分一起使用的反应 调度是异步的。如果希望同步,请使用dispatch sync 研究如何在保持事件处理程序为纯函数的同时进行ajax调用 阅读文档,re frame有非常好的文档。github中的Readme.md。请查看存储库中的示例应用程序以获取示例