私は複数の入力を持っており、maxlengthに達すると入力フォーカスを次の入力にしようとしています。私は、各入力は異なるonChangeイベントハンドラを持っている必要はありませんこの反応成分はどのように簡略化できますか?
handleTextChange1(e) {
const { value, maxLength } = e.target;
if (value.length === maxLength) {
ReactDOM.findDOMNode(this.nextComponent1).focus();
}
}
handleTextChange2(e) {
const { value, maxLength } = e.target;
if (value.length === maxLength) {
ReactDOM.findDOMNode(this.nextComponent2).focus();
}
}
render() {
return (
<form onSubmit={this.handleSubmit.bind(this)}>
<input onChange={this.handleTextChange1.bind(this)} maxLength="4"/>
<input ref={c => this.nextComponent1=c} onChange={this.handleTextChange2.bind(this)} maxLength="4" />
<input ref={c => this.nextComponent2=c} maxLength="4"/>
</form>
)
}
:
はここに私のコードです。
私はこれを単純化することができますか、または私がしようとしていることを達成するためのより良い方法はありますか?あなたは周りのref
がすぐに設定されていない作品が必要になる場合があり、実際のイベントハンドラ
... onChange={this.focusWhenChangeHappened(this.component1)} ...
... onChange={this.focusWhenChangeHappened(this.component2)} ...
を取り付け
focusWhenChangeHappened(component) {
return function eventHandler(e) {
const { value, maxLength } = e.target;
if (value.length === maxLength) {
ReactDOM.findDOMNode(component).focus();
}
}
}
:
それが動作する場合、これはちょっと、それを指摘してくれてありがとうコードレビューの姉妹サイト –
@SamiKuhmonenに適しかもしれません。私はそれが存在することを知らなかった。 – Dan