<aside> 💡
チャプター完了時点のソースコード
https://github.com/craftgear/react-hands-on/tree/ch4
</aside>
Reactが標準で提供するフック 16個
主に使うのは以下の4つ
ある時点での値を記憶しておく仕組み
覚える値の種類と値の更新方法の違いで色々種類がある
レンダリング時に毎回同じフックが同じ順番で呼び出される必要がある
サードパーティ製のカスタムフック
React Developer Toolでレンダリング表示を有効にする
<div className="card">...</div>
を <Counter/>
コンポーネントとして切り出す
setCount((count) => count+1)
を setCount(count+1)
に変更しておく。 import { useState } from 'react';
export const Counter = () => {
const [count, setCount] = useState(0)
return (
<div className="card">
<button onClick={() => setCount(count + 1)}>
count is {count}
</button>
<p>
Edit <code>src/App.jsx</code> and save to test HMR
</p>
</div>
)
}
レンダリングの違いを確認する
<Counter />
をコピーして <ObjectCounter />
を作成し、useStateで保存する値をオブジェクトに変更する。
import { useState } from 'react';
export const ObjectCounter = () => {
const [state, setState] = useState({ count: 0 });
return (
<div className="card">
<button
className="btn btn-primary text-xl"
onClick={() => {
state.count = state.count + 1;
setState(state);
}}
>
count is {state.count}
</button>
<p>
Edit <code>src/App.tsx</code> and save to test HMR
</p>
</div>
);
};
オブジェクトの値を直に書き換えてもコンポーネントが再レンダリングされないことを確認する。
onClick
で新規オブジェクトを作成してsetするとコンポーネントが再レンダリングされることを確認するpreviousValueを使って振る舞いの違いを確認する
新たに <Note />
コンポーネントを作成する。
export const Note = () => {
return <p className="text-3xl">Note</p>
}