推しアイデア
約2年の時を経て、ついに復活!!!
約2年の時を経て、ついに復活!!!
触ってみたかった技術と、長年の雪辱を果たスッ! ただ、それだけのタメなんダァ!!!
Shopify × Gatsby で実現する「圧倒的に速い(らしい)ECサイト」
はい、これで終わり!
npx gatsby new
TypeScriptが使いたかったらこのコマンドも叩いてね!
yarn add -D typescript
いろいろ書こうと思ったけど、こっちの方がわかりやすかったのでこの記事を参考にしてね!
自分だけのECサイトを作成! Shopify × Gatsby
上記の記事通りに手を動かせば Shopify × Gatsby
で作るECサイトのセットアップは完了したはずなので、
今回は一歩先に進んだ 「カート機能」 を実装しようと思います!
以下のコードをコピペしてgetCartItems
を動かすと、カートに追加したデータを簡単に取得することができます🛒
※ envファイル内の値や変数名は各自の環境に合わせて修正してください🙇♂️
getCartItems.tsximport Client from "shopify-buy"; const client = Client.buildClient({ domain: process.env.GATSBY_SHOPIFY_STORE_URL ?? "", storefrontAccessToken: process.env.GATSBY_STOREFRONT_ACCESS_TOKEN ?? "" }) export const getCartItems = async() => { // Checkoutを生成する // 公式ドキュメント:https://github.com/Shopify/js-buy-sdk#creating-a-checkout const newCheckout = await client.checkout.create(); // 作成した New Checkout に Shopify 側で保存されているデータをfetchする const existingCheckout = await client.checkout.fetch(newCheckout.id); // lineItem にカートに追加したアイテムが反映される console.log(existingCheckout.lineItem) return existingCheckout }
ここまできたら、あとは取得したデータを使ってよしなにやるだけです!
今回はただデータを表示するだけではつまらないので、ECサイトではよくアレを実装していきます!!!
Header.tsximport * as React from "react"; import { useState, useEffect } from "react"; import { Link } from "gatsby"; import { css } from "@emotion/react"; import { getCartItems ] from "../getCartItems.tsx" export const Header = () => { const [cartList, setCartList] = useState(null); useEffect(() => { const setUp = async () => { const data = await getCartItems(); if(!data) return false; setCartList(data); } catch (e) { console.log(e); } }; setUp(); }, []); let isBuying; if ( cartList.cart.lineItems && cartList.cart.lineItems.length > 0 ) { isBuying = css` position: relative; &::after { content: ""; width: 8px; height: 8px; position: absolute; top: 0; right: 0; border-radius: 4px; background: ${colors.green.lighten}; } `; } return ( <header> <nav> <Link to="/"> Hackz Jewel </Link> <button css={isBuying}> <カートのアイコン /> </button> </nav> </header> ); };
完成イメージはこんな感じ↓↓ カートに商品が追加されたら、よくあるマークが追加されるんだぜ!!!