동적으로 metadata를 구성하는 로직은 page.tsx
가 아닌 layout.tsx
에 구성했다.
-> 하위 페이지에서도 동일하게 metaTitle과 metaDescription을 사용하도록 하기 위해
/app
/:templateCode
layout.tsx -> 여기에서 동적으로 metadata를 세팅
page.tsx -> metadata 적용
/posts
/:postId
page.tsx -> metadata 적용
/:templateCode
라서, code를 기반으로 데이터를 요청해야 했는데, code와 id는 다르기 때문에, code를 가지고 metadata를 가져오려면 두 단계를 거쳐야 할 것이라고 생각했었다.const code = "templateCode";
const { data } = await supabase
.from("metadata")
.select(`
*,
template ()
`)
.eq("template.code", code)
.single();
export const PATCH = (req) => {
// ...
const { error } = await supabase
.from("post")
.update(newData)
.eq("id", id);
}
On-demand Revalidation
을 참고하여, refetch를 수행하도록 함.fetch
시, option으로 tag를 삽입하고, 업데이트가 필요한 시점에 revalidateTag
를 통해 데이터를 업데이트하도록 했다.// Fetching
const res = await fetch(url, { next: { tags: ["posts", "postImages", "comments"]}});
// Comment 생성 로직
const createComment = async () => {
// ...
revalidateTag("comments");
}