FreshのブログをAtomicDesignで設計したい

作成日
更新日

Atomic Designで設計してみたい。

用意するフォルダ

components 以下に配置

/components
  /atoms
    ├── Button.tsx
    ├── Input.tsx
    ├── Heading.tsx
  /molecules
    ├── SearchBox.tsx       // Input + Button
    ├── AccordionItem.tsx
  /organisms
    ├── Sidebar.tsx
    ├── TOC.tsx
    ├── Footer.tsx
    ├── MobileNav.tsx
    └── DarkModeToggle.tsx
/routes
  ├── index.tsx
  └── _layout.tsx     <- これを templates の役割にした

モバイルとデスクトップでレイアウトを分けたい

routes/
├── _app.tsx               ← 全ページに BaseLayout を適用
├── index.tsx              ← data: { postIndexes: PostIndex[] } を返す
└── articles/[slug].tsx    ← 同上

components/
├── layouts/
│   ├── BaseLayout.tsx     ← postIndexes を Sidebar に渡す
│   ├── DesktopLayout.tsx
│   └── MobileLayout.tsx
├── Sidebar.tsx            ← props.postIndexes を受け取って表示
import { ComponentType } from "preact/src/index.d.ts";
/**
 * レイアウトテンプレートに渡すProps
 */
export type LayoutProps<T> = {
  Component: ComponentType<{ data: T }>;
  route: string;
  data: T;
};

-> この方法はうまくいかず。

ルールきめる

  • 全ページ共通のレイアウトは _layout.tsx にかく
  • ~~`routesのページにはmain` タグからはじめる
    • そうとはかぎらんかった
    • 右側のサイドバーがあるため。
    • _layout.tsx を作るのはアリ。 -_layout.tsx のことを templates 扱いをし、templates は作らないことにした
サイトアイコン
公開日
更新日