启用禁用输入后反应自动对焦输入

React autofocus input after enabling a disabled input

我正在尝试自动聚焦文本输入(选择相关单选选项后启用输入)。

在启用文本输入的选项之间切换时,自动对焦有效。但是,当从禁用文本输入的选项切换到启用文本输入的选项时,自动对焦失败。

sample code for the problem on codesandbox

这不起作用,因为您在调用 setState 后立即设置了它,但在生命周期的这一点上,组件尚未重新呈现,并且对输入的引用仍处于禁用状态。

你需要做的是,在componentDidUpdate hook中组件更新后触发焦点处理。

类似这样的东西(伪代码)

componentDidUpdate(prevProps, prevState) {

  if (this.state.enabled) {
     this.inputValue.focus();
  }
}

您可能需要额外的检查,比如只关注从禁用到启用的转换。这可以通过做这样的事情来实现:

componentDidUpdate(prevProps, prevState) {
  if (!prevState.enabled && this.state.enabled) {
    this.inputValue.focus();
  }}

此处 link 到更新的代码框:https://codesandbox.io/s/31RnlkJW4

只需额外添加一点,autoFocus 仅适用于元素的初始渲染(基本上仅在 componentDidMount 运行时)。所以这就是为什么当您重新启用输入时它不会自动对焦,它不会被卸载然后重新安装。要使 autoFocus 正常工作,您需要将输入和禁用的输入移动到单独的组件中,并根据状态有条件地呈现它们。