状態変化が発生した後に、その関数を実行しますsetState()
に関数コールバックを渡すものでこの場合、正しく渡された場合でも、イベントターゲットはコールバック内でnullになります(状態が変更され、コンポーネントが再レンダリングされ、Reactによってイベントが消去され、ターゲットがなくなります)。
processOnBlur(event) {
this.setState({
input: event.target.id
},() => {
console.log(this.state.input);
});
}
:
あなたが最初のオフに、この問題を解決することができるいくつかの方法がありますが、あなたはちょうどあなたが状態を通して、あなたのコールバック関数で、それへのアクセス権を持っている意味event.target.id
に等しくなるように入力の状態を設定しました
もう1つのオプションは入力にref
を設定することです。これはReact機能であり、クラス・ファンクション内で自由に使用できるコンポーネントへの参照を提供します。あなたの入力にそう
:
processOnBlur(event) {
this.setState({
input: event.target.id
},() => {
console.log(this.refs.myInput.id);
});
}
// You could also use it to set your input state if you really wanted to,
// though event.target is probably more appropriate.
//
// input: this.refs.myInput.id
EDIT:私は忘れてしまった余分な方法
<input id="username"
type="text"
ref="myInput"
onBlur={(e) => this.processOnBlur(e)} />
次にあなたがそうのように、this.refs.myInput
を通して、あなたのイベントハンドラでアクセスすることができます(この状況では最も単純な場合もあります)は、イベントハンドラに渡されたイベントのevent.persist()
を呼び出します。
processOnBlur(event) {
event.persit();
this.setState({
input: event.target.id
},() => {
console.log(event.target.id);
});
}
これにより、Reactがイベント参照をワイプしてアクセス権を保持することを防ぎます。
すべての '()=> {... console.log ...'で 'event'パラメータを渡さないようにしてください。これは矢印の関数であり、 'processOnBlur'で渡された'わからない。 – dmi3y