|
1 | 1 | import { defer, LoaderFunction, LoaderFunctionArgs } from "@remix-run/node";
|
2 | 2 | import { Await, useLoaderData } from "@remix-run/react";
|
3 | 3 | import { NotionAPI } from "notion-client";
|
4 |
| -import React, { lazy, Suspense, useEffect, useState } from "react"; |
| 4 | +import React, { lazy, Suspense } from "react"; |
5 | 5 | import { ClientOnly } from "remix-utils/client-only";
|
6 | 6 | import {
|
7 | 7 | CodeBlock,
|
@@ -54,40 +54,33 @@ const Collection = lazy(() =>
|
54 | 54 | })),
|
55 | 55 | );
|
56 | 56 |
|
57 |
| -function NotionPage({ recordMap }: { recordMap: ExtendedRecordMap }) { |
58 |
| - const [isMounted, setIsMounted] = useState(false); |
59 |
| - |
60 |
| - // Prevent hydration errors |
61 |
| - useEffect(() => { |
62 |
| - setIsMounted(true); |
63 |
| - }, []); |
64 |
| - if (!isMounted) { |
65 |
| - return null; |
66 |
| - } |
67 |
| - |
68 |
| - return ( |
69 |
| - <NotionRenderer |
70 |
| - recordMap={recordMap} |
71 |
| - fullPage={true} |
72 |
| - darkMode={false} |
73 |
| - disableHeader={true} |
74 |
| - components={{ |
75 |
| - Pdf, |
76 |
| - Collection, |
77 |
| - Equation: (props: React.ComponentProps<typeof Equation>) => ( |
78 |
| - <ClientOnly fallback={<div>Loading equation...</div>}> |
79 |
| - {() => <Equation {...props} />} |
80 |
| - </ClientOnly> |
81 |
| - ), |
82 |
| - Code: (props: React.ComponentProps<typeof Code>) => ( |
83 |
| - <ClientOnly fallback={<div>Loading code...</div>}> |
84 |
| - {() => <Code {...props} />} |
85 |
| - </ClientOnly> |
86 |
| - ), |
87 |
| - }} |
88 |
| - /> |
89 |
| - ); |
90 |
| -} |
| 57 | +const NotionPage = React.memo( |
| 58 | + ({ recordMap }: { recordMap: ExtendedRecordMap }) => { |
| 59 | + return ( |
| 60 | + <NotionRenderer |
| 61 | + recordMap={recordMap} |
| 62 | + fullPage={true} |
| 63 | + darkMode={false} |
| 64 | + disableHeader={true} |
| 65 | + components={{ |
| 66 | + Pdf, |
| 67 | + Collection, |
| 68 | + Equation: (props: React.ComponentProps<typeof Equation>) => ( |
| 69 | + <ClientOnly fallback={<div>Loading equation...</div>}> |
| 70 | + {() => <Equation {...props} />} |
| 71 | + </ClientOnly> |
| 72 | + ), |
| 73 | + Code: (props: React.ComponentProps<typeof Code>) => ( |
| 74 | + <ClientOnly fallback={<div>Loading code...</div>}> |
| 75 | + {() => <Code {...props} />} |
| 76 | + </ClientOnly> |
| 77 | + ), |
| 78 | + }} |
| 79 | + /> |
| 80 | + ); |
| 81 | + }, |
| 82 | +); |
| 83 | +NotionPage.displayName = "NotionPage"; |
91 | 84 |
|
92 | 85 | export const loader: LoaderFunction = async ({
|
93 | 86 | params,
|
|
0 commit comments