フロントエンドマスターへの道 その5 snipcartとNext.jsで作るECサイト
上記記事の5つめ。チュートリアルのURLは以下
成果物は以下
チュートリアルからの変更点としては
- チュートリアルの使用しているNext.jsのバージョンが古くて、一部修正
- snipcartを2から3にバージョンアップ
- eslint+pretiierあたりの設定を追加
- emotionの採用、それにあたってsass関連パッケージを削除
- dotenvを使ってAPI_KEYを.envに記述
あたりになるかなと思います。追加パッケージは以下
yarn add @types/node \
prettier eslint eslint-config-prettier eslint-plugin-prettier \
eslint-plugin-react eslint-plugin-react-hooks \
@typescript-eslint/eslint-plugin @typescript-eslint/parser \
@emotion/core @emotion/styled @emotion/babel-preset-css-prop babel-plugin-emotion
emotion
Next.jsはよく使うので特に困ったことはなかったんだけど、emotionを使うのが初めてでどうするのがベストプラクティスなのかちょっとよくわからず手探りになってしまった(いい資料がみあたらず……あったら教えてください)
コンポーネントすべてのpropsに SerializedStyles
を渡せるようにしておいた。例えば Container.tsx
だと
import { css, SerializedStyles } from '@emotion/core'
const Container: React.FC<ContainerProps> = ({ children, cssProps }) => {
const container = css(
{
width: '100%',
maxWidth: '980px',
margin: '0 auto',
padding: '0 1rem',
},
cssProps
)
return <div css={container}>{children}</div>
}
type ContainerProps = {
cssProps?: SerializedStyles
}
export default Container
こうしておくと、親のコンポーネントからスタイルをあてられる
基本的には Object Styles で書くのがよさそうかなーという気がする
従来CSSのカスタムプロパティだったり、SCSSの変数だったりは Enum(Enumでなくてもいいけど) とかで設定してつかうことになる
export enum Color {
Text = '#111',
Background = '#fefefe',
Primary = '#cddc39',
PrimaryLight = '#ffff6e',
PrimaryDark = '#99aa00',
}
placeholderみたいなことも、乱用するとあまりよくなさそうではあるけど
こんな感じでできる。CSS in JSだと結構色々なことがやり放題ではある気がするので、こういったことをやるときにはこうする、これはやらない、みたいなルールはちゃんとほしい気がする
snipcart
とても便利だとおもうが、こういったECはローカライズされてないと使うのは厳しいのではないかなという気がする(売るものにもよるんだろうけど)
日本で似たようなサービスがあると便利だと思うんだけど、すでにあるのかな
感想
snipcartの導入があまりに簡単なのでECサイトのサンプルサイトを作った気がまったくしない、それくらい簡単だった
Author And Source
この問題について(フロントエンドマスターへの道 その5 snipcartとNext.jsで作るECサイト), 我々は、より多くの情報をここで見つけました https://qiita.com/hbsnow/items/2372e9a9915a3a08f9ae著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .