Чтение ввода с Om Next

Я пытаюсь понять, как читать состояние из текстового поля в om.next, Насколько я понимаю, мы больше не связаны / должны использовать core.async,

В качестве небольшого примера рассмотрим запись в текстовом поле и привязку его к элементу абзаца, чтобы вводимый вами текст автоматически отображался на экране.

(def app-state (atom {:input-text "starting text"}))


 (defn read-fn
   [{:keys [state] :as env} key params]
   (let [st @state]
     (if-let [[_ v] (find st key)]
       {:value v}
       {:value :not-found})))

 (defn mutate-fn
   [{:keys [state] :as env} key {:keys [mytext]}]
   (if (= 'update-text key)
     {:value {:keys [:input-text]}
      :action
      (fn []
        (swap! state assoc :input-text mytext))}
     {:value :not-found}))

(defui RootView
   static om/IQuery
   (query [_]
          [:input-text])
   Object
   (render [_]
           (let [{:keys [input-text]} (om/props _)]
             (dom/div nil
                      (dom/input
                       #js {:id "mybox"
                            :type "text"
                            :value input-text
                            :onChange #(om/transact! _ '[(update-text {:mytext (.-value (gdom/getElement "mybox"))})])
                            })
                      (dom/p nil input-text)))))

Это не работает

  1. При запуске события onChange в input форма, выражение в кавычках не захватывает текст из коробки.

  2. Первая мутация запускается и обновляется, но затем последующие мутации не запускаются. Даже если состояние не изменилось, запрос должен прочитать строку из app-state и заставить текст быть таким же?

1 ответ

Я бы сделал :onChange Событие выглядит так:

:onChange (fn (_)
            (let [v (.-value (gdom/getElement "mybox"))]
              #(om/transact! this `[(update-text {:mytext ~v})])))

Здесь значение v на самом деле будет проходить. Но также om/transact! нужен либо компонент, либо согласователь, чтобы передать его в качестве первого параметра. Здесь я прохожу в this который будет корневым компонентом.

Другие вопросы по тегам