假设您有一个文本字段,它是使用试剂在cljs中编写的聊天程序的输入。它可能看起来像这样:如何在试剂中定义聊天输入字段?
(defn chat-input []
(let [written-text (atom "")]
(fn []
[:textarea
{:value @written-text
:on-change #(reset! written-text (-> % .-target .-value))}])))
现在实现发送消息的简单方法是添加一个发送按钮。但是有一种互动与聊天非常不可分割,以至于你不可能没有它:输入或换入发送消息。但我无法弄清楚如何实现它。
我的第一个尝试是简单地添加一个:按键按下事件处理程序来发送消息并将状态重置为“”。该解决方案受到How to detect enter key press in reagent的启发。
(defn chat-input []
(let [written-text (atom "")]
(fn []
[:textarea
{:value @written-text
:on-change #(reset! written-text (-> % .-target .-value))
:on-key-press (fn [e]
(let [enter 13]
(println "Key press" (.-charCode e))
(if (= (.-charCode e) enter)
(reset! written-text "")
(println "Not enter."))))}])))
的问题是,在:on-key-press
调用(reset! written-text "")
没有效果,可能是因为它是由:on-change
事件处理程序覆盖。
那么你有关于如何实现这个功能的任何想法?如果是这样,请分享!