管理焦点

在React组件中管理文本框的焦点是一件棘手的事情。浏览器的focus/blur API是必不可少的,所以很难用声明的方式通过render()处理。

考虑到这一点,在Facebook中,我们将focus()方法暴露在组件上。这打破了声明范式,但简化了开发者在程序中处理焦点的过程。

Editor组件遵循这样的模式,你可以在上层组件中使用ref获取到组件,之后直接使用focus()使编辑器获取焦点。

事件监听系统会观察焦点改变,之后通过onchange来使dom和state保持同步。

将容器的点击转换为焦点

你的上层组件可能会将Editor包裹在一个容器中,可能包含一些样式啥的。

一版情况下,用户点击了容器,但是并没有点到Editor组件上。想在这种情况下让Editor组件获取焦点的话,你需要在容器中监听点击事件,并且使用focus()方法来把焦点放到你的编辑器上。

这个文本编辑器示例使用了这个方式。

results matching ""

    No results matching ""