react-notion
을 활용해 Notion에 작성한 포트폴리오 페이지의 내용을 Next.js 프로젝트에 적용해보자.https://notion-api.splitbee.io/v1/page
notion-api-worker
를 사용하면 공개된 페이지인 경우 간단하게 데이터를 받아올 수 있다.// 20230303202117
// https://notion-api.splitbee.io/v1/page
{
"error": "Route not found!",
"routes": [
"/v1/page/:pageId",
"/v1/table/:pageId",
"/v1/user/:pageId"
]
}
pageId
를 얻을 수 있다.https://aseungbo.notion.site/James-An-14304e546f5047cba2f0a02d8b2c77cd
14304e546f5047cba2f0a02d8b2c77cd
이 부분이 pageId
가 된다.https://notion-api.splitbee.io/v1/page/14304e546f5047cba2f0a02d8b2c77cd
react-notion
를 활용해서 쉽게 npm install react-notion
fetch
를 사용했다./app/page.tsx
import { NotionRenderer } from "react-notion";
import "react-notion/src/styles.css";
async function fetchNotion() {
const notionResponse = await fetch(
"https://notion-api.splitbee.io/v1/page/14304e546f5047cba2f0a02d8b2c77cd",
{
// cache: "force-cache", // SSG
cache: "no-store", // SSR
// next: {
// revalidate: 10, // ISR
// },
}
);
console.log(notionResponse);
if (!notionResponse.ok) {
throw new Error("Failed to fetch data");
}
return notionResponse.json();
}
export default async function Home() {
const notion = await fetchNotion();
return (
<main>
<NotionRenderer blockMap={notion} />
</main>
);
}
react-notion
의 NotionRenderer
와 styles.css
를 통해 Notion 페이지와 동일한 형태로 렌더링되는 걸 볼 수 있다.