const [count, setCount] = useState(0);
戻り値:
state変数とそのstate更新関数をタプルとして返す
*JSにはタプル型はない。 そこで TypeScript では JavaScript の配列をタプルとして扱えるように設計されている。
let 変数名: [データ型, データ型] = [値, 値];
TypeScript でuseState を使う際の注意点として、stateの型が推論できるかどうか ということに注意する必要がある。
(例)外部API にリクエストしてユーザー情報を取得、そのオブジェクトをstate に入れるような場合だと、初期値として渡せるような型を持ったデータがない
そういうときは型推論に任せず、useStateに明示的に型引数を渡してあげる必要がある
const [author, setAuthor] = useState<User>();
const [articles, setArticles] = useState<Article[]>([]);
useState<User | null>(null)
と書けるconst [count, setCount] = useState(0);
const increment = () => setCount((c) => c + 1);
// const increment = () => setCount(count + 1); ではだめ!!
const increment = () => setCount(count + 1);
この書き方では、
レンダリング時点でのcount が0 だったとしたら、それを1 に上書きする処理を3 回繰り返すことになる
クラスコンポーネントではthis.state には常に最新の値が入ってるのに対して、 State Hook ではレンダリングごとにstate 変数は一定である