あなたは、試薬でcljsで書かれたチャットプログラムの入力であるテキストフィールドがあるとします。チャット入力フィールドはどのように試薬に定義されていますか?
(defn chat-input []
(let [written-text (atom "")]
(fn []
[:textarea
{:value @written-text
:on-change #(reset! written-text (-> % .-target .-value))}])))
メッセージの送信を実装する簡単な方法は、送信ボタンを追加することです。しかし、チャットに不可欠な1つのやりとりがあります。チャットには不可能です。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
イベントハンドラによって上書きだからでしょう、何の効果もありませんということで問題。
この機能を実装する方法はありますか?もしそうなら、共有してください!