【React×Context API】ショッピングカートを誰でも作れる実装ガイド|コード付き解説

プログラミング

「ショッピングカートをReactで作りたいけれど、データの管理が難しい」
「Context APIをどう使えばいいかわからない」
そうお悩みの方も多いのではないでしょうか?

この記事では、ReactのContext APIを使って、誰でも簡単にショッピングカートが作れる方法を丁寧に解説いたします。

小学生でも理解できるように言葉を選び、実際のコードと構成をすべて掲載
コピペで動かせる完成形コードもご用意しています。

「カートに商品を追加する」「削除する」「合計金額を出す」といった基本機能を、順番にわかりやすく学べる内容です。


Reactでショッピングカートを作る意味

ネット通販とReactの相性とは?

結論:ショッピングカートはWeb開発の登竜門であり、実務でも頻出の機能です。

最近ではオンラインストアやフリマアプリなど、多くのWebサービスが「買い物かご(カート)機能」を持っています。

たとえば:

  • Amazonや楽天などの大型通販サイト
  • 個人向けのハンドメイド販売サイト
  • 飲食店のオンライン注文システム

このような実例に共通するのが、商品を選んでカートに入れ、合計金額を確認し、購入するという流れです。

Reactは部品ごとに機能を分けられるため、カートの状態管理に非常に適していると言えます。

さらに、Context APIを使えば、どの画面からでもカートの中身にアクセス可能になるため、アプリ全体の整合性が取りやすくなります。


Context APIの導入と使い方

Context APIとは何かを簡単に説明

結論:複数の画面で共通のデータを使うための道具です。

Reactでは通常、親から子へデータを渡します(props)。

ですが、深い階層になると、毎回propsを渡すのは大変です。

そこで使うのがContext APIです。

Context APIの使い方は以下のようになります:

  1. Contextを作る
  2. Providerで全体を囲む
  3. useContextでデータを使う

今回はカートの中身(商品リストや合計金額)をContextで管理します。

Context APIの設定手順

まず、CartContext.jsというファイルを作り、以下のように書きます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import { createContext, useState, useContext } from 'react';
const CartContext = createContext();
export const CartProvider = ({ children }) => {
  const [cartItems, setCartItems] = useState([]);
  const addToCart = (item) => {
    setCartItems([...cartItems, item]);
  };
  const removeFromCart = (index) => {
    const newCart = [...cartItems];
    newCart.splice(index, 1);
    setCartItems(newCart);
  };
  return (
    <CartContext.Provider value={{ cartItems, addToCart, removeFromCart }}>
      {children}
    </CartContext.Provider>
  );
};
export const useCart = () => useContext(CartContext);

次に、App.jsで全体をこのCartProviderで囲みます。

1
2
3
4
5
6
7
8
import { CartProvider } from './CartContext';
function App() {
  return (
    <CartProvider>
      <YourRoutesHere />
    </CartProvider>
  );
}

商品一覧とカート追加機能の実装

商品一覧ページを作ってみよう

結論:商品を一覧で表示し、ボタンでカートに追加できるようにします。

以下は例として簡単な商品一覧です。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import { useCart } from './CartContext';
const products = [
  { name: 'りんご', price: 120 },
  { name: 'バナナ', price: 80 },
  { name: 'みかん', price: 100 }
];
function ProductList() {
  const { addToCart } = useCart();
  return (
    <div>
      <h2>商品一覧</h2>
      {products.map((product, index) => (
        <div key={index}>
          {product.name} - ¥{product.price}
          <button onClick={() => addToCart(product)}>カートに追加</button>
        </div>
      ))}
    </div>
  );
}

この画面で「カートに追加」ボタンを押すと、Contextを通じてカート情報が更新されます。


カート画面と削除機能の実装

カート内容の表示と削除

結論:Contextからカートの中身を取り出して表示すればOKです。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import { useCart } from './CartContext';
function Cart() {
  const { cartItems, removeFromCart } = useCart();
  const total = cartItems.reduce((sum, item) => sum + item.price, 0);
  return (
    <div>
      <h2>カートの中身</h2>
      {cartItems.map((item, index) => (
        <div key={index}>
          {item.name} - ¥{item.price}
          <button onClick={() => removeFromCart(index)}>削除</button>
        </div>
      ))}
      <h3>合計: ¥{total}</h3>
    </div>
  );
}

ショッピングカート機能のまとめと注意点

実務で使う場合のポイント

学習目的としては十分な構成ですが、実務で使う場合には以下の注意が必要です

  • 商品データはサーバーから取得する
  • カート内容はブラウザに保存する(localStorage)
  • 数量の管理(同じ商品を複数追加)
  • 金額表示を桁区切りで表示

完成形のコード一覧

App.js

1
2
3
4
5
6
7
8
9
10
11
12
import ProductList from './ProductList';
import Cart from './Cart';
import { CartProvider } from './CartContext';
function App() {
  return (
    <CartProvider>
      <ProductList />
      <Cart />
    </CartProvider>
  );
}
export default App;

ProductList.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import { useCart } from './CartContext';
const products = [
  { name: 'りんご', price: 120 },
  { name: 'バナナ', price: 80 },
  { name: 'みかん', price: 100 }
];
function ProductList() {
  const { addToCart } = useCart();
  return (
    <div>
      <h2>商品一覧</h2>
      {products.map((product, index) => (
        <div key={index}>
          {product.name} - ¥{product.price}
          <button onClick={() => addToCart(product)}>カートに追加</button>
        </div>
      ))}
    </div>
  );
}

Cart.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import { useCart } from './CartContext';
function Cart() {
  const { cartItems, removeFromCart } = useCart();
  const total = cartItems.reduce((sum, item) => sum + item.price, 0);
  return (
    <div>
      <h2>カートの中身</h2>
      {cartItems.map((item, index) => (
        <div key={index}>
          {item.name} - ¥{item.price}
          <button onClick={() => removeFromCart(index)}>削除</button>
        </div>
      ))}
      <h3>合計: ¥{total}</h3>
    </div>
  );
}

CartContext.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import { createContext, useState, useContext } from 'react';
const CartContext = createContext();
export const CartProvider = ({ children }) => {
  const [cartItems, setCartItems] = useState([]);
  const addToCart = (item) => {
    setCartItems([...cartItems, item]);
  };
  const removeFromCart = (index) => {
    const newCart = [...cartItems];
    newCart.splice(index, 1);
    setCartItems(newCart);
  };
  return (
    <CartContext.Provider value={{ cartItems, addToCart, removeFromCart }}>
      {children}
    </CartContext.Provider>
  );
};
export const useCart = () => useContext(CartContext);

まとめ

この記事ではReactとContext APIを使って、誰でも簡単に作れるショッピングカートアプリの作り方を紹介しました。

  • Contextを使えば、どこからでもカートの中身にアクセスできる
  • 商品追加や削除も数行のコードで実装可能
  • 合計金額もその場で計算できる

Reactを使った買い物かごの仕組みを、一歩一歩作りながら学べる内容になっています。

「難しそう」と思っていたカート機能も、実はここまでシンプルなんだと実感できたのではないでしょうか。

関連リンク:

タイトルとURLをコピーしました