BFE.devでのAI解答例 - React コーディング問題
11. useFocus()
import { useState, useEffect, useRef } from 'react';function useFocus() { const [isFocused, setIsFocused] = useState(false); const ref = useRef(null); const onFocus = () => setIsFocused(true); const onBlur = () => setIsFocused(false); useEffect(() => { const node = ref.current; if (node) { node.addEventListener('focus', onFocus); node.addEventListener('blur', onBlur); return () => { node.removeEventListener('focus', onFocus); node.removeEventListener('blur', onBlur); }; } }, []); return [ref, isFocused];}function App() { const [ref, isFocused] = useFocus(); return ( <div> <input ref={ref} /> {isFocused && <p>focused</p>} </div> );}
useFocus()
は、useState、useEffect、useRefを使用して、フォーカス状態をコントロールします。ref
を返し、それを<input>
要素に提供して、focus
およびblur
イベントをuseEffect
から追加/削除します。そして、真偽値のisFocused
ステートを返します。isFocused
が真の場合、条件付きレンダリングで<p>
要素をレンダリングします。そして、<App>
でuseFocus()
を使用し、ref
とisFocused
の両方をレンダリングしています。