【发布时间】:2017-10-04 02:20:06
【问题描述】:
我使用 Function 组件来渲染组件。 但是只要设置了状态,输入控件就会失去焦点。
如何更改下面的代码以使输入不会失去焦点?我需要该组件是一个 Function 组件。
我的表单上有 10 个输入,因此取决于哪个文本框已更改,它应该在呈现后将焦点放在更改的文本框上。
在 changeHandler(event) 中,我知道包含引用已更改文本框的目标属性的事件,因此我需要在呈现状态后将焦点设置到目标输入元素。
也许我应该定义一个类级别的变量并将目标设置为那个。
import React, {Component} from 'react';
export default class PlaybackPassword extends Component{
constructor(props) {
super(props);
this.state = {
setting: {}
}
this.focusElement = null;
this.changeHandler= this.changeHandler.bind(this);
}
componentDidUpdate()
{
if (this.focusElement != null)
this.focusElement.focus();
}
changeHandler(event)
{
this.focusElement = event.target;
var setting = this.state.setting;
setting.SelectedValue = event.target.value;
this.setState({setting : setting});
}
render() {
var parent = this;
function Password(props)
{
return (<div className="password">
<input type="password"
value={props.selectedValue} onChange={parent.changeHandler} />
</div>);
}
return (
<div className="playbackPassword">
<Password selectedValue={this.state.setting.SelectedValue} />
</div>
);
}
}
【问题讨论】:
-
您可以将
autoFocus属性传递给输入元素。如果输入在更新期间的任何时候失去焦点,您可以设置一个 ref 并在componentDidUpdate生命周期方法中手动关注它。 -
能否提供示例代码?
-
在分配
onChange处理程序后,只需将autoFocus添加为属性即可。 stackoverflow.com/questions/28889826/… -
如果你稍微清理一下代码,我认为你不会遇到自动对焦问题:密码组件应该移到渲染之外。
标签: javascript html reactjs components state