我用表单裁判,但现在我必须说明的形式,我现在面临一个问题,我要明确一个字段用户提交的东西之后。如何清除不受控制的领域反应
handleSumbit = (e) => {
e.preventDefault()
const todoText = this.state.todoText
if(todoText.length > 0){
this.refs.todoTextElem = "" // wont work
this.props.onAddTodo(todoText)
} else {
this.refs.todoTextElem.focus() //worked
}
}
render() {
return(
<div>
<form onSubmit={this.handleSumbit}>
<input ref="todoTextElem" type="text" onChange={e => this.setState({todoText: e.target.value})} name="todoText" placeholder="What do you need to do?" />
<button className="button expanded">Add Todo</button>
</form>
</div>
)
}
清除ref根本不起作用,因为它是一个受控输入。我不想做一些愚蠢像
从父组件传递一个标志,告诉提交再使用的setState清除输入的形式。或使onAddTodo有一个回调,这样我可以做
this.props.onAddTodo(todoText).then(()=>this.state({todoText:""}))
如果窗体有像复选框和单选按钮的东西的形式使用ref而不是状态是好的吗? –
一般我们应该尽量避免使用ref,总是使用状态变量。请检查此文档中关于ref的说明:[何时使用参考](https://facebook.github.io/react/docs/refs-and-the-dom.html#when-to-use-refs)和[Don 't Overuse Refs](https://facebook.github.io/react/docs/refs-and-the-dom.html#dont-overuse-refs) –
但是您在上面的表单中使用了ref? lol。如果你使用状态,如果你想清除输入的字段为空,意味着再有一个再显示。这很好吗?或者我已经过去担心表现? –