/** * React 컴포넌트 사용 예제 * * 설정: * 1. .env 에 VITE_ENTITY_SERVER_URL=http://localhost:47200 추가 * 2. 로그인 시 entityServer.login(email, password) 호출 * 3. 이후 client 메서드로 데이터 조회/수정 */ // @ts-ignore import { useEffect, useState } from "react"; // @ts-ignore import { useEntityServer } from "entity-client/react"; // @ts-ignore import type { EntityListResult } from "entity-client"; interface Product { seq: number; name: string; price: number; category: string; } // ─── 목록 컴포넌트 ───────────────────────────────────────────────────────── export function ProductList() { const { client, isPending, error, del } = useEntityServer(); const [page, setPage] = useState(1); const [result, setResult] = useState | null>( null, ); const [loading, setLoading] = useState(false); useEffect(() => { setLoading(true); client .list("product", { page, limit: 20 }) .then((r) => setResult(r.data)) .finally(() => setLoading(false)); }, [client, page]); if (loading) return

로딩 중...

; if (error) return

에러: {error.message}

; return (

상품 목록 ({result?.total ?? 0}건)

    {result?.items.map((item) => (
  • [{item.seq}] {item.name} — {item.price.toLocaleString()} 원
  • ))}
{page}
); } // ─── 단건 조회 컴포넌트 ───────────────────────────────────────────────────── export function ProductDetail({ seq }: { seq: number }) { const { client } = useEntityServer(); const [item, setItem] = useState(null); const [loading, setLoading] = useState(true); useEffect(() => { client .get("product", seq) .then((r) => setItem(r.data)) .catch(() => setItem(null)) .finally(() => setLoading(false)); }, [client, seq]); if (loading) return

로딩 중...

; if (!item) return

상품을 찾을 수 없습니다.

; return (

{item.name}

가격: {item.price.toLocaleString()}원

카테고리: {item.category}

); } // ─── 생성/수정 폼 컴포넌트 ────────────────────────────────────────────────── export function ProductForm({ seq }: { seq?: number }) { const { submit, isPending } = useEntityServer(); const [form, setForm] = useState({ name: "", price: 0, category: "" }); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); // seq 있으면 수정, 없으면 생성 await submit("product", seq ? { ...form, seq } : form); alert(seq ? "수정 완료" : "등록 완료"); }; return (
setForm((f) => ({ ...f, name: e.target.value })) } /> setForm((f) => ({ ...f, price: +e.target.value })) } /> setForm((f) => ({ ...f, category: e.target.value })) } />
); }