私はフォームのrefを使用していましたが、今は常にフォームについて述べています。ユーザーが何かを投稿した後にフィールドをクリアする必要があります。リアクションでコントロールされていないフィールドをクリアする方法
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を使用して入力をクリアすると、私は何か愚かなことをしたくありません。それとも私が
this.props.onAddTodo(todoText).then(()=>this.state({todoText:""}))
フォームは、チェックボックスやラジオボタンのようなものを持っている場合、それは良いフォームの状態の代わりに参照を使用することですか? –
一般的に私たちは、常に状態変数を使用して、refの使用を避けるようにしてください。 ref:[Refsを使うタイミング](https://facebook.github.io/react/docs/refs-and-the-dom.html#when-to-use-refs)と[Don 'Refuse Overs Refs'(https://facebook.github.io/react/docs/refs-and-the-dom.html#dont-overuse-refs) –
上記のフォームでrefを使用しましたか?あなたが状態を使用している場合は、入力フィールドを空にする必要がある場合は、さらに1つ再レンダリングすることを意味します。それはいいですか、私は試合のパフォーマンスを心配していますか? –