我正在构建一个带有文本输入字段列表的重新框架应用程序。我希望行为是当用户按下RETURN
时,会创建一个新行并将焦点放在新行上。我成功创建了新行,当我尝试在change-focus
event-handler中使用此调用将焦点更改为该新行时:
(.focus (.getElementById js/document focus-element))
我收到错误:Cannot read property 'focus' of null
。
我认为这是因为视图尚未呈现新创建的行。使用重新框架将焦点更改为新元素的最佳方法是什么?
我应该将活动行放在我的 state atom 中并在视图中呈现它吗?或者可能在渲染视图后触发另一个事件?我喜欢一些意见。
答案 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互操作代码。