"use client"; // 홈에 들어가는 '테마로 골라보기' 그리드. // /api/themes 인덱스를 받아 카드로 펼치고, 카드 클릭 시 /themes/{slug} 로 이동. import Link from "next/link"; import { useEffect, useState } from "react"; import { api, type ThemesIndexResponse } from "../lib/api"; export function ThemeTiles() { const [data, setData] = useState(null); const [err, setErr] = useState(null); useEffect(() => { let alive = true; api .themesIndex() .then((r) => { if (alive) setData(r); }) .catch((e) => { if (alive) setErr(e instanceof Error ? e.message : String(e)); }); return () => { alive = false; }; }, []); if (err) return (
테마 로딩 실패: {err}
); if (!data) return (
테마 로딩 중…
); return (

테마로 골라보기

{data.total} 카테고리
{data.items.map((t) => (
{t.name}
{t.description}
{t.code_count} 종목
))}
); }