假設您有一個文本字段,它是使用試劑在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
事件處理程序覆蓋。
那麼你有關於如何實現這個功能的任何想法?如果是這樣,請分享!