Реагент: компонент-did-mount
Я пытаюсь установить начальный фокус на входном элементе
(defn initial-focus-wrapper [element]
(with-meta element
{:component-did-mount #(.focus (reagent/dom-node %))}))
(defn chat-input []
(fn []
[initial-focus-wrapper
[:input {:type "text"}]]))
это не работает для меня, хотя. Что я делаю не так?
2 ответов
как говорит сбенсу with-meta
только кажется, что работает в реагенте на функцию. Это означает, что его можно использовать с identity
чтобы произвести многоразовую обертку, как надеялись
(def initial-focus-wrapper
(with-meta identity
{:component-did-mount #(.focus (reagent/dom-node %))}))
(defn chat-input []
(fn []
[initial-focus-wrapper
[:input {:type "text"}]]))
Я думаю with-meta
должен принимать функцию в качестве аргумента. Из документов:
(def my-html (atom ""))
(defn plain-component []
[:p "My html is " @my-html])
(def component-with-callback
(with-meta plain-component
{:component-did-mount
(fn [this]
(reset! my-html (.-innerHTML (reagent/dom-node this))))}))
таким образом, ваш код должен быть:
(defn initial-focus-wrapper [element]
(with-meta element
{:component-did-mount #(.focus (reagent/dom-node %))}))
(defn chat-input []
[initial-focus-wrapper
(fn []
[:input {:type "text"}]]))