ReactJS - 使用 ref 切换显示元素的优雅解决方案
ReactJS - Elegant solution to toggle show element with ref
如果 this.state.editMode 为假,则输入不显示,在这种情况下,this.textInput 的 ref 设置在输入显示之前未定义。但是,如果我想单击 span 以显示输入,我需要专注于输入。
有没有人对此有一个优雅的解决方案,还是我想多了?提前谢谢你。
focusOnTextInput() {
this.textInput.focus();
}
setEditMode() {
this.editMode = !this.editMode;
this.setState(() => ({
editMode: this.editMode
}));
if (this.editMode) {
this.focusOnTextInput();
}
}
render() {
return (
<li className="task">
{
this.state.editMode ?
<input
type="text"
ref={(input) => { this.textInput = input; }}
onKeyUp={this.keyUpCheck}
onChange={this.changeValue}
value={this.state.newTitle} /> :
<span onClick={this.setEditMode}>{ this.state.title }</span>
}
<span>{ this.props.done }</span>
<span>{ this.props.inProgress }</span>
<button onClick={this.props.onRemove}>X</button>
</li>
)
}
好吧,我添加了关于 editMode 的更改,它工作得很好,而且焦点现在可以工作,因为 ref 意味着什么......非常好,谢谢 Tony :-)
setEditMode() {
this.setState(() => ({
editMode: !this.state.editMode
}));
}
componentDidUpdate(prevProps, prevState) {
if (this.state.editMode) {
this.focusOnTextInput();
}
}
现在如何设置为完整并给你满分..?
如果您使用 componentDidUpdate(prevProps, prevState)
,您将能够检查 this.state.editMode
是否已设置并调用您的 this.focusOnTextInput()
如果 this.state.editMode 为假,则输入不显示,在这种情况下,this.textInput 的 ref 设置在输入显示之前未定义。但是,如果我想单击 span 以显示输入,我需要专注于输入。
有没有人对此有一个优雅的解决方案,还是我想多了?提前谢谢你。
focusOnTextInput() {
this.textInput.focus();
}
setEditMode() {
this.editMode = !this.editMode;
this.setState(() => ({
editMode: this.editMode
}));
if (this.editMode) {
this.focusOnTextInput();
}
}
render() {
return (
<li className="task">
{
this.state.editMode ?
<input
type="text"
ref={(input) => { this.textInput = input; }}
onKeyUp={this.keyUpCheck}
onChange={this.changeValue}
value={this.state.newTitle} /> :
<span onClick={this.setEditMode}>{ this.state.title }</span>
}
<span>{ this.props.done }</span>
<span>{ this.props.inProgress }</span>
<button onClick={this.props.onRemove}>X</button>
</li>
)
}
好吧,我添加了关于 editMode 的更改,它工作得很好,而且焦点现在可以工作,因为 ref 意味着什么......非常好,谢谢 Tony :-)
setEditMode() {
this.setState(() => ({
editMode: !this.state.editMode
}));
}
componentDidUpdate(prevProps, prevState) {
if (this.state.editMode) {
this.focusOnTextInput();
}
}
现在如何设置为完整并给你满分..?
如果您使用 componentDidUpdate(prevProps, prevState)
,您将能够检查 this.state.editMode
是否已设置并调用您的 this.focusOnTextInput()