React + TypeScript: 状態に収めた配列を更新する(初心者メモ)

Programming
公開: 2024-11-26

メモ

React + TypeScript: 状態に収めた配列を更新する

要するに React では配列を直接変更しても画面には反映されない。
配列に対するどのような変更であっても 新しい配列を作成してセッターに代入 という手法を取る必要がある。

場合によっては非常に非効率な(直感に反する)コードを書くことになるが、このルールが絶対。

コード例

要素の追加

push() しても無意味。
concat()、スプレッド構文を使用して、新しい配列を生成し、セッターに代入(setArtists)

setArtists([...artists, { id: nextId++, name }]); 

要素の削除

pop()、shift()、splice() はすべて無意味。
filter()、slice()を使用して、新しい配列を生成し、セッターに代入(setArtists)

setArtists(artists.filter(({ id }) => id !== artist.id));

要素の変更

添え字を使用して配列の中身を書き換えても無意味。
map() を使用する。
オブジェクトの配列で1要素の1プロパティを変更する場合でも、新しい配列を生成し、セッターに代入(setArtists)

const nextShapes = shapes.map((shape) =>
	shape.type === 'square'
	? {
		...shape,
		type: 'circle',
		color: 'deeppink'
	}
	: {
		...shape,
		y: shape.y + 50
	}
);
setShapes(nextShapes);