무한로드제거
This commit is contained in:
@@ -1,30 +1,26 @@
|
||||
import { notFound } from "next/navigation";
|
||||
import { useToast } from "@/app/components/ui/ToastProvider";
|
||||
import { useEffect } from "react";
|
||||
import { headers } from "next/headers";
|
||||
import React, { use } from "react";
|
||||
|
||||
export default async function PostDetail({ params }: { params: { id: string } }) {
|
||||
const res = await fetch(`${process.env.NEXT_PUBLIC_BASE_URL ?? ""}/api/posts/${params.id}`, { cache: "no-store" });
|
||||
export default async function PostDetail({ params }: { params: Promise<{ id: string }> }) {
|
||||
const { id } = use(params);
|
||||
const h = await headers();
|
||||
const host = h.get("host") ?? "localhost:3000";
|
||||
const proto = h.get("x-forwarded-proto") ?? "http";
|
||||
const base = process.env.NEXT_PUBLIC_BASE_URL || `${proto}://${host}`;
|
||||
const res = await fetch(new URL(`/api/posts/${id}`, base).toString(), { cache: "no-store" });
|
||||
if (!res.ok) return notFound();
|
||||
const { post } = await res.json();
|
||||
return (
|
||||
<ClientPostDetail post={post} />
|
||||
);
|
||||
}
|
||||
|
||||
function ClientPostDetail({ post }: { post: { id: string; title: string; content: string } }) {
|
||||
// client only
|
||||
// @ts-expect-error react client hook use
|
||||
const { show } = useToast();
|
||||
// @ts-expect-error react client hook use
|
||||
useEffect(() => {
|
||||
fetch(`/api/posts/${post.id}/view`, { method: "POST" });
|
||||
}, [post.id]);
|
||||
return (
|
||||
<div>
|
||||
<h1>{post.title}</h1>
|
||||
<div style={{ display: "flex", gap: 8, margin: "8px 0" }}>
|
||||
<button onClick={async () => { await fetch(`/api/posts/${post.id}/recommend`, { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify({ clientHash: "anon" }) }); show("추천했습니다"); }}>추천</button>
|
||||
<button onClick={async () => { const reason = prompt("신고 사유?") || ""; if(!reason) return; await fetch(`/api/posts/${post.id}/report`, { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify({ reason }) }); show("신고되었습니다"); }}>신고</button>
|
||||
<form action={`/api/posts/${post.id}/recommend`} method="post">
|
||||
<button type="submit">추천</button>
|
||||
</form>
|
||||
<form action={`/api/posts/${post.id}/report`} method="post">
|
||||
<button type="submit">신고</button>
|
||||
</form>
|
||||
</div>
|
||||
<p style={{ whiteSpace: "pre-wrap" }}>{post.content}</p>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user