管理焦点
在React组件中管理文本框的焦点是一件棘手的事情。浏览器的focus/blur API是必不可少的,所以很难用声明的方式通过render()处理。
考虑到这一点,在Facebook中,我们将focus()方法暴露在组件上。这打破了声明范式,但简化了开发者在程序中处理焦点的过程。
Editor
组件遵循这样的模式,你可以在上层组件中使用ref
获取到组件,之后直接使用focus()
使编辑器获取焦点。
事件监听系统会观察焦点改变,之后通过onchange
来使dom和state保持同步。
将容器的点击转换为焦点
你的上层组件可能会将Editor
包裹在一个容器中,可能包含一些样式啥的。
一版情况下,用户点击了容器,但是并没有点到Editor
组件上。想在这种情况下让Editor
组件获取焦点的话,你需要在容器中监听点击事件,并且使用focus()
方法来把焦点放到你的编辑器上。
这个文本编辑器示例使用了这个方式。