React+TypeScript 買い物リスト 数量入り

はじめに

元記事 : 【 React Hooks 入門】useState を使って買い物リストを作るチュートリアル

がやっと動いたので載せて置きます。

Todoリストと似ているけど、それぞれに数量があって、合計が表示されるのをhookでどうやるのかなぁ、と思っていました。普通にuseStateで書き換えていました。(追記: useEffectを使う方式に書き換えました。)

このチュートリアルもそうですがHooksが現れてからComponentもclassも使わずにまるでElmの様に書くのが普通になりつつある。Reduxも使わない。良いことだと思います。

実行例

See the Pen Untitled by kalz2q (@kalz2q) on CodePen.

解説

元記事はfontawesomeを多用していたのをfontawesomeを使わない形にしました。
済にするのをcheckboxを使う形に変えました。
autofocusを足した。
formを使う形にしてenterでsubmitになるようにした。

当初動かなかったのはItemの型が決まっていなかったからのようで

  const [items, setItems] = useState<Item[]>([]);

  type Item = {
    itemName: string,
    quantity: number,
    isSelected: boolean,
  };

としました。

id が無いのでワーニングが出ますがとりあえず動いたのでこのままにします。

totalの書き換えが元記事ではuseStateだけで書き換えていますが、新たなitemが生じた時にもcalculateTotalが発火するようにuseEffectにしないと駄目だと思います。