0
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?

【オリジナルアプリ.2】購入履歴管理アプリRecapを作る4

Last updated at Posted at 2026-02-04

内容

カテゴリ追加機能を作る!
スクリーンショット 2026-02-04 17.45.25.png

1.新しくユーザーが足したカテゴリを合体

今の categories は、データ(list)から自動で作るようにしていました。ここに「新しくユーザーが足したカテゴリ」も合流させる必要があります。

まずは、手動で追加したカテゴリを保存するための配列を用意します。

Home.jsx
  // 追加されたカテゴリ
 const [addedCategories, setAddedCategories] = useState([]);

次に、もともとlistにあったカテゴリと、追加したカテゴリをくっつけます。
合体した後にカテゴリの配列を作成します。

Home.jsx
  // カテゴリを合体
 const allCategories = [
   ...list.map((item) => item.category), // 1. 支出データにあるカテゴリ
   ...addedCategories, // 2. 手動で追加したカテゴリ
 ];

 // 全てを合体させてから、Set で重複を削除し、最後に「全て」を先頭に添える
 const categories = ["全て", ...new Set(allCategories.filter((cat) => cat))];

注意点

こう書いちゃうと、画像みたいにヘッダーのカテゴリが重複しちゃうので注意。

Home.jsx
const categories = [
 "全て", 
 ...new Set(list.map(item => item.category)), 
 ...addedCategories
];

a2579402-ea56-46ee-81c5-d4e15913aba8.png

2.入力されたカテゴリをどう保存するか

新しいカテゴリを引数に受け取り、addedCategories(手動で追加したカテゴリを保存するための配列)にくっつける関数を作成。

Home.jsx
  // 新規カテゴリ追加
  const handleAddCategory = (newCat) => {
    // 今までの配列 (...addedCategories) を広げて、新しいのを追加
    setAddedCategories([...addedCategories, newCat]);
  };

そしたらhandleAddCategoryをpropsでPlusModal.jsxに渡す。
そして、PlusModal.jsxの+ボタンのonClick内でhandleAddCategory関数に、入力されたカテゴリを渡せばOK!

PlusModal.jsx
                {/* カテゴリを新しく作るためのボタン */}
                <IconButton
                  aria-label="Add category"
                  icon={<AddIcon />}
                  variant="outline"
                  onClick={() => {
                    // ① ユーザーにカテゴリ名を入力してもらう
                    const name = prompt("新規カテゴリ追加");

                    // ② もし名前が入力されたら、親にその名前を伝える
                    if (name) {
                      // ここで親(Home.jsx)から受け取った「カテゴリ追加用関数」を実行する
                      handleAddCategory(name);
                      // 「今選択されているカテゴリ」のStateも、この名前に書き換える!
                      setNewItemCategory(name);
                    }
                  }}
                />

setNewItemCategory(name);を書けば、新しく追加した時に自動的に選択された状態にできる!

結果

スーパーを追加すると、、
スクリーンショット 2026-02-04 18.01.09.png

自動で選択された状態になってるし、ヘッダーのカテゴリ欄にも追加されてる!
スクリーンショット 2026-02-04 18.03.24.png

0
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
0
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?