1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【React】チェックボックスにドハマリした

Last updated at Posted at 2024-11-03

Reactでチェックボックスにドハマリしました。
自分自身のメモのために記録します。

機能的にはONにしたら親コンポーネントの一覧に表示、OFFにしたら一覧から削除という単純な流れ。
無題の動画 ‐ Clipchampで作成.gif

修正前

 <input
	type="checkbox"
	id={album.id}
	className={albumArtList.some((item) => item.id === album.id) ? 'selected' : 'select'}
	checked={albumArtList.some((item) => item.id === album.id)}
	onChange={() => handleChange(album.id, album.name, album.images[0]?.url, album.artists.map((value) => value.name).join(','))}
/>

<label
htmlFor={album.id} className={albumArtList.some((item) => item.id === album.id) ? 'l-button bg-orange txt-white action ta-center' : 'l-button bg-turquoise txt-white action ta-center'}>
{albumArtList.some((item) => item.id === album.id) ? '選択中' : '選択'}
</label>

SpotifyAPIから取得してきたアルバムデータを表示しているだけの、単純なチェックボックスです。
この状態では、チェックボックスをONに設定はできるもののOFFにできない…という状態に。

検証

このチェックボックスですが、スタイルでチェックボックス自体は非表示にしていました。
checkedの真偽ロジックがおかしいのか検証している中で、スタイルを無効化し直接チェックボックスを操作すると希望通りの動きに…。
チェックボックス自体とラベルの連動がおかしいという原因を見つけました。

修正後

 <input
	type="checkbox"
	id={`checkbox-${album.id}`}
	className={albumArtList.some((item) => item.id === album.id) ? 'selected' : 'select'}
	checked={albumArtList.some((item) => item.id === album.id)}
	onChange={() => handleChange(album.id, album.name, album.images[0]?.url, album.artists.map((value) => value.name).join(','))}
/>

<label
htmlFor={`checkbox-${album.id}`} className={albumArtList.some((item) => item.id === album.id) ? 'l-button bg-orange txt-white action ta-center' : 'l-button bg-turquoise txt-white action ta-center'}>
{albumArtList.some((item) => item.id === album.id) ? '選択中' : '選択'}
</label>

変更点はidとhtmlForの部分です。
アルバムごとに動的に生成していたのですが、一時的にDOM上の一致が崩れ関連付けできなかったみたいです。
それぞれにプレフィックスをつけることで解決しました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?