Closed8

React Hooks のベストプラクティスを知りたい

yukiyuki

他に定番っぽい記事があったら知りたい。

yukiyuki

なるほどー。ちゃんと眺めたことなかったからだけど、いくつか知らないものもあった。
https://reactjs.org/docs/hooks-reference.html

useReducer は値の set 以外の State 操作を扱いたい場合に使えそう。サンプルコードを見ると、カウンターに対して increment と decrement の定義をしておいて、あとはメソッドディスパッチをして各々呼び出すということを実現できてる。

ちなみに、useReducer の第3引数を上手に使うと初期値設定を遅延できる。

function init(initialCount) {
  return {count: initialCount};
}

function reducer(state, action) {
  switch (action.type) {
    case 'increment':
      return {count: state.count + 1};
    case 'decrement':
      return {count: state.count - 1};
    case 'reset':
      return init(action.payload);
    default:
      throw new Error();
  }
}

function Counter({initialCount}) {
  const [state, dispatch] = useReducer(reducer, initialCount, init);
  return (
    <>
      Count: {state.count}
      <button
        onClick={() => dispatch({type: 'reset', payload: initialCount})}>
        Reset
      </button>
      <button onClick={() => dispatch({type: 'decrement'})}>-</button>
      <button onClick={() => dispatch({type: 'increment'})}>+</button>
    </>
  );
}

useDebugValue を使うと、React DevTools 向けにデバッグログを出力できる。カスタム Hooks を用意したい場合に使えそう。

useRef はミュータブルな State の値を返すことができる。

function TextInputWithFocusButton() {
  const inputEl = useRef(null);
  const onButtonClick = () => {
    // `current` points to the mounted text input element
    inputEl.current.focus();
  };
  return (
    <>
      <input ref={inputEl} type="text" />
      <button onClick={onButtonClick}>Focus the input</button>
    </>
  );
}

あとはコメントをもらった react-use をいくつか読むのが一番上達が早そうに思った!

yukiyuki

Hooks はこう眺めてみると、全体的に関数型プログラミングで登場してくる話が出てくる。Algebraic Effects が裏側にありそうな気がするなー。

このスクラップは2020/11/27にクローズされました