首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >re-frame:分派后重置atom

re-frame:分派后重置atom
EN

Stack Overflow用户
提问于 2018-10-12 06:55:51
回答 3查看 486关注 0票数 3

我有这个表格:

代码语言:javascript
复制
(defn input-question
  []
 (let [new-question (reagent/atom "")]
  (fn []
  [:div
   [:input {:type      "text"
            :value     @new-question
            :on-change #(reset! new-question (-> % .-target .-value))}]
   [:input {:type     "button"
            :value    "Save new question"
            :on-click #(re-frame.core/dispatch [:create-question @new-question])} ] ])))

如何在分派后将@new-empty重置为"“(空字符串)?

EN

回答 3

Stack Overflow用户

发布于 2018-10-12 09:04:21

调度完成后,您可以在ratom上使用reset!

代码语言:javascript
复制
#(do (re-frame.core/dispatch [:create-question @new-question])
     (reset! new-question ""))

以在分派该值后重置它。

票数 4
EN

Stack Overflow用户

发布于 2018-10-12 09:04:29

您可能需要查看重新框显效果文档:

请注意,您还可以使用dispatch-n

并且,您可能希望使用fn语法而不是#(...)速记函数语法:

代码语言:javascript
复制
:input {:type     "button"
        :value    "Save new question"
        :on-click (fn []
                     (re-frame.core/dispatch [:create-question @new-question])
                     (reset! new-question "")) } ]
票数 2
EN

Stack Overflow用户

发布于 2018-12-10 07:09:52

您还可以同时使用事件和subs,以尽可能多地将逻辑排除在视图代码之外。这意味着你最终会有许多任意的事件和subs,然而这是通过设计和惯用的方式来重新构建的。这使得重新构建代码更容易理解、解耦和更具可测试性。下面是一个示例:

代码语言:javascript
复制
(rf/reg-fx
  :save-question
  (fn [question]))
    ;; Handle creating a question

(rf/reg-sub
  :new-question-value
  (fn [db _]
    (get-in db [:new-question :value])))

(rf/reg-event-db
  :on-new-question-change
  (fn [db [_ value]]
    (assoc-in db [:new-question :value] value)))

(rf/reg-event-fx
  :on-save-question-click
  (fn [{:keys [db]} _]
    {:db              (assoc-in db [:new-question :value] "")
     :save-question   (get-in db [:new-question :value])}))


(defn input-question
  []
  (let [new-question-value       (rf/subscribe [:new-question-value])
        on-save-question-click   #(rf/dispatch [:on-save-question-click])
        on-new-question-change   #(rf/dispatch [:on-new-question-change (.. % -target -value)])]
    (fn []
      [:div
       [:input {:type      "text"
                :value     @new-question-value
                :on-change on-new-question-change}]
       [:input {:type     "button"
                :value    "Save new question"
                :on-click on-save-question-click}]])))

关于此代码的一些额外说明:

  • 您应该为事件和子键命名空间,以防止命名冲突
  • 您应该定义一个函数并将其传递给reg-fxreg-event-dbreg-event-fxreg-sub。这样做可以允许测试代码直接调用函数处理程序,从而使代码更具可测试性。不过,您仍然可以使用Day8/re-frame-test进行测试,但这会有点困难。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52769976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档