【问题标题】:on-click handler for a list item reagent clojurescript列表项试剂 clojurescript 的单击处理程序
【发布时间】:2015-06-23 17:51:41
【问题描述】:

我想为列表中的每个项目添加一个点击处理程序。

(defonce selected-department (atom "department!"))

(defn sidebar []
  [:div#sidebar-wrapper
   [:ul.sidebar-nav
    [:li.sidebar-brand [:a {:href "#"} "Departments"]]

    ;;[:li [:a {:on-click (reset! selected-department "test!")} "Dairy"]]

    [:li [:a {:href "#"} "Dairy"]]
    [:li [:a {:href "#"} "Deli"]]
    [:li [:a {:href "#"} "Grocery"]]]])

然后 selected-department 是我要显示/使用数据的标签

(defn response-box []
  [:div#form_comparison
   [:label#dlabel @selected-department]])

注释掉的代码不起作用。有没有办法使这项工作?

【问题讨论】:

    标签: clojure clojurescript reagent


    【解决方案1】:

    您的示例不起作用,因为您必须像这样将函数传递给 :on-click :

    [:li [:a {:on-click #(reset! selected-department "test!")} "Dairy"]]
    

    所以你唯一需要改变的就是在 (reset! ...

    等价于

     [:li [:a {:on-click (fn [_] (reset! selected-department "test!"))} "Dairy"]]
    

    编辑:

    这是我测试的完整代码,对我来说可以正常工作:

    (defonce selected-department (atom "department!"))
    
    (defn sidebar []
      [:div#sidebar-wrapper
       [:ul.sidebar-nav
        [:li.sidebar-brand [:a {:href "#"} "Departments"]]
        [:li [:a {:on-click #(reset! selected-department "Dairy") :href "#"} "Dairy"]]
        [:li [:a {:on-click #(reset! selected-department "Deli") :href "#"} "Deli"]]
        [:li [:a {:on-click #(reset! selected-department "Grocery") :href "#"} "Grocery"]]]
     [:label @selected-department]])
    
    (reagent/render-component [sidebar] (.getElementById js/document "app"))
    

    点击列表中的项目时,底部的标签会更新。

    【讨论】:

    • 这是有道理的,但我都试过了,但都没有成功,将 ui 中的 atom 更改为单击的列表项。
    • 我能够运行它并且它对我有用。只是为了确保我已经编辑了答案并将我的整个解决方案粘贴在这里。
    • 现在可以了,我一定是在某个地方犯了一个小错误。谢谢!
    • 我仍然想知道通过传递 fn0 而不是 fn1 来利用函数的 JS impl 是否合法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-08
    • 1970-01-01
    • 1970-01-01
    • 2011-08-10
    相关资源
    最近更新 更多