React Hooks - izudon/izudon.github.io GitHub Wiki

カスタムフックの流儀

Web Dev Simplified

Custom Hooks

20 - Custom Hooks #26-30:

30 useLongPress

29 useHover

28 useDebugInformation

27 useRenderCount

26 useOnlineStatus

19 - Custom Hooks #21-25:

25 useTranslation

24 useCookie

23 useCopyToClipboard

22 useDarkMode

21 useClickOutside

18 - Custom Hooks #16-20:

20 useEffectOnce

19 useSize

18 useStateWithValidation

17 useGeolocation

16 useMediaQuery

17- Custom Hooks #11-15:

15 useWindowSize

14 useOnScreen

13 useEventListener

  • 実際
    • 任意のエレメント(デフォルトはトップレベルエレメント)に、
      コールバックを伴ってイベントリスナを仕掛ける( addEventListener() する)。
    • 何が嬉しいかというとこの時、対となる removeEventListener() が、
      アンマウント時に行われるような予約を、同時にやっておいてくれるという点だ。
      addEventListener() は、useEffect() を用いて、副作用としておこなうが、
      戻り値として removeEventListener() する関数を戻しておくわけだ。

12 useDeepCompareEffect

11 useScript

16 - Custom Hooks #6-10:

10 useFetch

  • 予想
    • 返値 [ loading, error, data ]
    • 引数 useFetch( uri, options, forData )
      • options にはデフォルト値があり、デフォルトと違うものを
        あえて指定するプロパティのみオブジェクトで伝える。
    • 呼んだ時点で fetch が飛び、非同期なのですぐ返ってくる。
      • loading はしたがってすぐ true となり、
        レスポンスが返り次第それは false になる。
      • それとほぼ時を同じくして、error または data に、
        何らかのオブジェクトが入っていることになる。
  • 期待(たぶんこんな useFetch() が欲しかったのだわと今気付く)
    • 引数 useFetch( uri, options )
    • 返値 [ loading, error, data, doFetch ]
      • doFetch() の引数 doFetch( formData, options )
      • doFetch を呼んではじめて fetch が飛ぶ。
  • 実際
    • 上記書籍内で紹介のものに近かった。

09 useAsync

  • 予想
    • ・・・

08 useStorage / useSessionStorage / useLocaStorage

07 useStateWithHistory

  • 予想
    • 当該変数の値を履歴として最初からすべて記憶している。
  • 実際
    • 履歴上の任意の点に戻って(参照点を移して)、
      そこから履歴を作り直すこともできる。
      (このとき参照点以降の履歴は白紙撤回になる)。
    • 前回値と今回値に変化があったかなかったか、
      useRef() を使って前回値を保存しておいて調べている。

06 usePrevious

  • 予想
    • 返値 [ prevValue, nowValue, setValue ]
    • 引数 usePreviout( initialValue )
  • 実際
    • useRef() を使って前回値を保存している。
      useState() ではいけなかったのか?)

15 - Custom Hooks #1-5:

05 useArray

  • 予想
    • 返値 [ array, { setArray, clear, push, pop, shift, unshift, splice } ]
    • 引数 useArray( initialArrayValue )

04 useUpdateEffect

  • 実際
    • useEffect() のプチ進化版。
    • 引数 useUpdateEffect( callback, 依存配列 )
    • 第2引数の依存配列の値に変化があればコールバックが呼ばれる。
      但し useEffect() と異なり、初回ロード時にはコールバックされない。

03 useDebounce

  • debounce 跳ね返りを抑えること
  • 予想
    • 引数 useDebounce( timeoutSec, callback )
    • 返値 [ restOfTime, chatter ]
    • timeoutSec 内に何度 chatter が呼ばれてもコールバックは呼ばれない。
      最後の chatter から timeoutSec 秒経過まで全く chatter がなければ、
      初めて callback が呼ばれる。

02 useTimeout

  • 予想
    • 返値 [ count, { resetCount, doStartStop } ]
    • 引数 useTimeout( initialCount, callback )
    • resetCount(・・引数なし・・) で、カウントは元の値に戻る(10秒タイマなら10に戻る)。
      resetCount( initialCount ) で、カウントは引数指定の値 initialCount に戻る。
      カウントの進行停止は変化なし。
  • 実際
    • 次節 useDebounce の前フリとなるように仕様された関数だった。

01 useToggle

  • 予想
    • 戻値 [ state, toggleState ]
    • 引数 useToggle( initialVaue );
  • 実際
    • toggleState(・・引数なし・・) で 真偽逆転。
      toggleState( true )true に設定、
      toggleState( false )false に設定。
      このアイデアは初めて見た。

14 - How To Create Custom Hooks

00 useLocalStorage

  • 予想
    • 引数 useLocalStorage( key, defaultValue )
    • 返値 [ value, setValue ]
      setValue によりステート変数 value の値も変化するほか、
      同時に LocalStorage への保存もおこなわれる。