Clojurescript重新框架:将焦点更改为新创建的元素

时间:2017-07-16 21:24:03

标签: clojurescript re-frame

我正在构建一个带有文本输入字段列表的重新框架应用程序。我希望行为是当用户按下RETURN时,会创建一个新行并将焦点放在新行上。我成功创建了新行,当我尝试在change-focus event-handler中使用此调用将焦点更改为该新行时:

(.focus (.getElementById js/document focus-element))

我收到错误:Cannot read property 'focus' of null

我认为这是因为视图尚未呈现新创建的行。使用重新框架将焦点更改为新元素的最佳方法是什么?

我应该将活动行放在我的 state atom 中并在视图中呈现它吗?或者可能在渲染视图后触发另一个事件?我喜欢一些意见。

1 个答案:

答案 0 :(得分:0)

如果表单添加的每一行都是组件,那么您可以在componentDidMount生命周期回调上设置处理程序。它将在已经渲染的组件之后调用。要在re-frame中执行此操作,您应该使用reagent的{​​{1}}这样的

create-class

您可以尝试使用React.JS引用或(defn my-row [input-id] (reagent/create-class {:component-did-mount #(.focus (.getElementById js/document input-id)) :reagent-render (fn [input-id] [:div.form-group [:input.form-control {:id input-id, :type "text"}]])})) ,而不是在reagent/dom-node处理函数中使用JS互操作代码。