【发布时间】:2017-01-19 19:59:59
【问题描述】:
假设您有一个文本字段,它是用 cljs 编写的带有试剂的聊天程序的输入。它可能看起来像这样:
(defn chat-input []
(let [written-text (atom "")]
(fn []
[:textarea
{:value @written-text
:on-change #(reset! written-text (-> % .-target .-value))}])))
现在实现发送消息的简单方法是添加发送按钮。但是有一种交互对于聊天来说是如此不可或缺,以至于你不能没有它:enter 或 shift-enter 发送消息。但我不知道如何实现它。
我的第一次尝试是简单地添加一个 :on-key-press 事件处理程序来发送消息并将状态重置为“”。此解决方案的灵感来自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 事件处理程序覆盖了。
那么您对如何实现此功能有任何想法吗?如果有,请分享!
【问题讨论】:
标签: textarea chat clojurescript reagent