💨

formタグの中のデータが反映されない問題(React)

2023/01/18に公開

formタグの中のデータが反映されない問題

インスタのような投稿ページをフォームで表そうとしたときに削除ボタンを押しても消えない。。。
だけど、コンソールだと消えてる問題に頭を抱えた。
問題のプログラムの例

const [tags,setTags]=([])//タグの変数
const deleteTag(e)=>{
	var tagNumber = Number(e.target.value);
	var arr =tags;
	var arr2=[];
	arr2=arr.splice(tagNumber,1)
	setTags(arr2);
}
<form>
	{tags.map((tag,index)=>(<>
		<p>{tag}</p>
		<button onClick={deleteTag}value={index}</button>
	</>))}
</form>

この場合だと配列のタグの場所の数値をdeleteTag関数に送って数値に変えてから消す仕組みになっているが、×ボタンを押してからタグの入力場所に何かキーを押さないと消えなくなってしまった。

改善したプログラム

const [tags,setTags]=([])//タグの変数
const deleteTag(e)=>{
	setTags(tags.filter((tag,index)=> tag !== e.target.value)))
}
<form>
	{tags.map((tag)=>(<>
		<p>{tag}</p>
		<button onClick={deleteTag}value={tag}</button>
	</>))}
</form>

直した所はsetTags内でfilter関数を使い配列内のタグ削除とOnClick時のvalueのindexからtagに変えたところです。

まとめ

spliceだとuseState配列との相性が悪かったので使わない。
useState内の配列を取り出すときはfilterを使うことでmap変数内でも問題なく削除の制御が出来る。

Discussion