この解答例はChatGPTによって生成されています,正しいかは自己判断で。

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()は、useStateuseEffectuseRefを使用して、フォーカス状態をコントロールします。refを返し、それを<input>要素に提供して、focusおよびblurイベントをuseEffectから追加/削除します。そして、真偽値のisFocusedステートを返します。isFocusedが真の場合、条件付きレンダリングで<p>要素をレンダリングします。そして、<App>useFocus()を使用し、refisFocusedの両方をレンダリングしています。