React Hooks早わかり(useState編)
投稿日 : 2022-03-27
更新日 : 2022-04-03
useState概要
ステートを管理するhooks
公式リファレンス
https://ja.reactjs.org/docs/hooks-reference.html#usestate
基本形
import { VFC, useState } from "react";
type Todo = {
text: string;
};
const UseStateSample: VFC = () => {
// number
const [count, setCount] = useState(0);
// string
const [text, setText] = useState("");
// object[]
const [todos, setTodos] = useState<Todo[]>([{ text: "Learn hooks" }]);
}
Stateの更新
// number
<button onClick={() => setCount((prevCount) => prevCount + 1)}>click</button>
// object[]
<button onClick={() => { setTodos([...todos, { text: todo }])}}>add Todo</button>
Stateの更新(オブジェクトのリスト)
useStateの更新判定は値の同一性(Object.is())で比較される。
そのため、オブジェクトのプロパティの値をただ更新するだけでは変更は検知できない。
⇔オブジェクトをコピーした上で、変更をマージする必要がある。
※サンプルコード
import { VFC, useState } from "react";
type Member = {
id: number;
name: string;
age: number;
checked: boolean;
};
const UseStateSample: VFC<Member[]> = () => {
const [members, setMembers] = useState<Member[]>([]);
const update = (id: number) => {
setMembers([
...members.map((member) => (member.id === id ? update(member) : member)),
])
}
return (
// return jsx
)
};
全体のサンプルコードは下記リンクを参照ください。
https://github.com/w8f/react-training/commit/74bf3d5d904ece40d3a63fb8318005def94f36c9