🐥
React × TypeScript でのメモアプリ作成 #5 (削除ボタンの作成)
作成日:
2022/02/08
3
学習メモ
削除ボタンの作成
- mapのindexを受け取って、どの削除ボタンが押されたか判断する
- splice() を使ってリストから削除
setOutputText
に新しいリストを入れて更新
import classes from "./styles/App.module.scss";
import { useState, useRef } from "react";
export const App = () => {
const inputElement = useRef<HTMLInputElement>(null);
const [outputText, setOutputText] = useState<string[] | null>([]);
const onClickAddButton = () => {
if (inputElement.current?.value === "") return; // フォームに入力された文字が空白の場合は何もしない
// フォームに入力した値を配列に入れる
const newTexts = [...outputText!, inputElement.current!.value];
setOutputText(newTexts);
// フォームに入力した値をリセットする
inputElement.current!.value = "";
}
const onClickDeleteButton = (i: number) => {
const newTexts = [...outputText!];
newTexts.splice(i, 1);
setOutputText(newTexts);
}
return(
<div className={classes.container}>
<h1 className={classes.title}>簡単メモアプリ</h1>
<div className={classes.inputArea}>
<input ref={inputElement} className={classes.inputAreaTextArea} type="text" placeholder="メモを入力" />
<button onClick={onClickAddButton} className={classes.inputAreaButton}>追加</button>
</div>
<section className={classes.outputArea}>
<h2 className={classes.outputAreaTitle}>メモ一覧</h2>
<ul className={classes.outputAreaList}>
{
outputText!.map((listItem: string, i: number) =>
<li className={classes.outputAreaListItem} key={i}>
<span>{listItem}</span>
<button onClick={() => onClickDeleteButton(i)}>✕</button>
</li>
)
}
</ul>
</section>
</div>
);
};
所感
すべての機能が揃ったので
次回はコンポーネント化・カスタムフック化をしてみます。