私はonFocus
、onBlur
、およびref
のコールバックを設定したいReactにinput要素を持っています。 ref
コールバックを設定すると、input.focus()
を内部で実行すると、onBlur
イベントが発生するという望ましくない動作が発生します。`ref`によって呼び出されたinput.focus()は` onBlur`イベントを呼び出す
<input
onFocus={() => {
props.startSearch(); // set props.active === true
}}
onBlur={() => {
props.endSearch(); // set props.active === false
}}
ref={(input) => {
if (input && props.active) {
input.focus();
}
}}
/>
私は、アクション設定props.active
をtrueにディスパッチする別のコンポーネントを持っています。これは、入力コンポーネントに焦点を当てるべきです。しかし、部品のマウント、予期せず入力のonBlur
コールバック火災時に:
ref => onFocus => onBlur
は、これはtrueにprops.active
を設定しているが、その後すぐに、それは偽(props.endSearch
火災ので)を設定します。
私がinput.focus()
をコメントアウトし、手動で入力をフォーカスするには、onFocus => ref
が必要です。しかし、これは明らかに入力を「自動焦点合わせ」する効果はありません。
なぜinput.focus()
は火にonBlur
をトリガされ、どのように私はこれを防ぐことができますか?
'REF => onFocus'、右?私の唯一の推測は、あなたが入力に焦点を当てた直後に何かが焦点を盗んでいるということです。フォーカスはどこで終わるのですか? – Aaron
はい、 'ref => onFocus'は望ましい動作です。アクティブな要素はちょうど 'body'で、フォーカスを盗む方法がわからない... – Himmel
' document.querySelector( ":focus") 'はあなたに何を与えるのですか? – Aaron