Closed8
React Hooks のベストプラクティスを知りたい
普段仕事などで使っているものの、結構なんとなくで使っているのでこの際きっちり学ぶ。
読む。
Best Practices With React Hooks
他に定番っぽい記事があったら知りたい。
ボイラープレートが多いなーと思っていたら、ちょっと楽にしてくれるextensionがVSCodeにあるらしい
React Hooks Snippets for Visual Studio Code
ユーザーが求めていた物感がすごい。
なるほどー。ちゃんと眺めたことなかったからだけど、いくつか知らないものもあった。
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 をいくつか読むのが一番上達が早そうに思った!
Hooks はこう眺めてみると、全体的に関数型プログラミングで登場してくる話が出てくる。Algebraic Effects が裏側にありそうな気がするなー。
このスクラップは2020/11/27にクローズされました