Skip to content

Commit fe1ac9b

Browse files
committed
Refactor component imports to use dynamic loading in Page and MDXComponents
1 parent 40ea071 commit fe1ac9b

File tree

2 files changed

+100
-34
lines changed

2 files changed

+100
-34
lines changed

src/components/Layout/Page.tsx

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,25 +12,36 @@
1212
import {Suspense} from 'react';
1313
import * as React from 'react';
1414
import {useRouter} from 'next/router';
15-
import {SidebarNav} from './SidebarNav';
16-
import {Footer} from './Footer';
17-
import {Toc} from './Toc';
1815
// import SocialBanner from '../SocialBanner';
19-
import {DocsPageFooter} from 'components/DocsFooter';
20-
import {Seo} from 'components/Seo';
21-
import PageHeading from 'components/PageHeading';
2216
import {getRouteMeta} from './getRouteMeta';
23-
import {TocContext} from '../MDX/TocContext';
2417
import {Languages, LanguagesContext} from '../MDX/LanguagesContext';
2518
import type {TocItem} from 'components/MDX/TocContext';
2619
import type {RouteItem} from 'components/Layout/getRouteMeta';
27-
import {HomeContent} from './HomeContent';
2820
import {TopNav} from './TopNav';
2921
import cn from 'classnames';
3022
import Head from 'next/head';
31-
23+
import dynamic from 'next/dynamic';
3224
import(/* webpackPrefetch: true */ '../MDX/CodeBlock/CodeBlock');
3325

26+
const HomeContent = dynamic(() =>
27+
import('./HomeContent').then((mod) => mod.HomeContent)
28+
);
29+
const DocsPageFooter = dynamic(() =>
30+
import('components/DocsFooter').then((mod) => mod.DocsPageFooter)
31+
);
32+
const SidebarNav = dynamic(() =>
33+
import('./SidebarNav').then((mod) => mod.SidebarNav)
34+
);
35+
const Toc = dynamic(() => import('./Toc').then((mod) => mod.Toc));
36+
const Footer = dynamic(() => import('./Footer').then((mod) => mod.Footer));
37+
const Seo = dynamic(() => import('components/Seo').then((mod) => mod.Seo));
38+
const PageHeading = dynamic(() =>
39+
import('components/PageHeading').then((mod) => mod.default)
40+
);
41+
const TocContext = dynamic(() =>
42+
import('../MDX/TocContext').then((mod) => mod.TocContext)
43+
);
44+
3445
interface PageProps {
3546
children: React.ReactNode;
3647
toc: Array<TocItem>;

src/components/MDX/MDXComponents.tsx

Lines changed: 80 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -14,37 +14,92 @@ import * as React from 'react';
1414
import cn from 'classnames';
1515
import type {HTMLAttributes} from 'react';
1616

17-
import CodeBlock from './CodeBlock';
18-
import {CodeDiagram} from './CodeDiagram';
19-
import {ConsoleBlock, ConsoleLogLine, ConsoleBlockMulti} from './ConsoleBlock';
20-
import ExpandableCallout from './ExpandableCallout';
21-
import ExpandableExample from './ExpandableExample';
2217
import {H1, H2, H3, H4, H5} from './Heading';
23-
import InlineCode from './InlineCode';
24-
import Intro from './Intro';
25-
import BlogCard from './BlogCard';
26-
import Link from './Link';
27-
import {PackageImport} from './PackageImport';
28-
import Recap from './Recap';
29-
import {SandpackClient as Sandpack, SandpackRSC} from './Sandpack';
30-
import SandpackWithHTMLOutput from './SandpackWithHTMLOutput';
31-
import Diagram from './Diagram';
32-
import DiagramGroup from './DiagramGroup';
33-
import SimpleCallout from './SimpleCallout';
34-
import TerminalBlock from './TerminalBlock';
35-
import YouWillLearnCard from './YouWillLearnCard';
36-
import {Challenges, Hint, Solution} from './Challenges';
37-
import {IconNavArrow} from '../Icon/IconNavArrow';
38-
import ButtonLink from 'components/ButtonLink';
3918
import {TocContext} from './TocContext';
4019
import type {Toc, TocItem} from './TocContext';
41-
import {TeamMember} from './TeamMember';
4220
import {LanguagesContext} from './LanguagesContext';
4321
import {finishedTranslations} from 'utils/finishedTranslations';
22+
import dynamic from 'next/dynamic';
4423

45-
import ErrorDecoder from './ErrorDecoder';
46-
import {IconCanary} from '../Icon/IconCanary';
47-
import {IconExperimental} from 'components/Icon/IconExperimental';
24+
const TeamMember = dynamic(() =>
25+
import('./TeamMember').then((mod) => mod.TeamMember)
26+
);
27+
const CodeBlock = dynamic(() =>
28+
import('./CodeBlock').then((mod) => mod.default)
29+
);
30+
const CodeDiagram = dynamic(() =>
31+
import('./CodeDiagram').then((mod) => mod.CodeDiagram)
32+
);
33+
const ConsoleBlock = dynamic(() =>
34+
import('./ConsoleBlock').then((mod) => mod.ConsoleBlock)
35+
);
36+
const ConsoleBlockMulti = dynamic(() =>
37+
import('./ConsoleBlock').then((mod) => mod.ConsoleBlockMulti)
38+
);
39+
const ConsoleLogLine = dynamic(() =>
40+
import('./ConsoleBlock').then((mod) => mod.ConsoleLogLine)
41+
);
42+
const ExpandableCallout = dynamic(() =>
43+
import('./ExpandableCallout').then((mod) => mod.default)
44+
);
45+
const ExpandableExample = dynamic(() =>
46+
import('./ExpandableExample').then((mod) => mod.default)
47+
);
48+
const InlineCode = dynamic(() =>
49+
import('./InlineCode').then((mod) => mod.default)
50+
);
51+
const Intro = dynamic(() => import('./Intro').then((mod) => mod.default));
52+
const BlogCard = dynamic(() => import('./BlogCard').then((mod) => mod.default));
53+
const Link = dynamic(() => import('./Link').then((mod) => mod.default));
54+
const PackageImport = dynamic(() =>
55+
import('./PackageImport').then((mod) => mod.PackageImport)
56+
);
57+
const Recap = dynamic(() => import('./Recap').then((mod) => mod.default));
58+
const Sandpack = dynamic(() =>
59+
import('./Sandpack').then((mod) => mod.SandpackClient)
60+
);
61+
const SandpackRSC = dynamic(() =>
62+
import('./Sandpack').then((mod) => mod.SandpackRSC)
63+
);
64+
const SandpackWithHTMLOutput = dynamic(() =>
65+
import('./SandpackWithHTMLOutput').then((mod) => mod.default)
66+
);
67+
const Diagram = dynamic(() => import('./Diagram').then((mod) => mod.default));
68+
const DiagramGroup = dynamic(() =>
69+
import('./DiagramGroup').then((mod) => mod.default)
70+
);
71+
const SimpleCallout = dynamic(() =>
72+
import('./SimpleCallout').then((mod) => mod.default)
73+
);
74+
const TerminalBlock = dynamic(() =>
75+
import('./TerminalBlock').then((mod) => mod.default)
76+
);
77+
const YouWillLearnCard = dynamic(() =>
78+
import('./YouWillLearnCard').then((mod) => mod.default)
79+
);
80+
81+
const Challenges = dynamic(() =>
82+
import('./Challenges').then((mod) => mod.Challenges)
83+
);
84+
const Hint = dynamic(() => import('./Challenges').then((mod) => mod.Hint));
85+
const Solution = dynamic(() =>
86+
import('./Challenges').then((mod) => mod.Solution)
87+
);
88+
const IconNavArrow = dynamic(() =>
89+
import('../Icon/IconNavArrow').then((mod) => mod.IconNavArrow)
90+
);
91+
const ButtonLink = dynamic(() =>
92+
import('components/ButtonLink').then((mod) => mod.default)
93+
);
94+
const ErrorDecoder = dynamic(() =>
95+
import('./ErrorDecoder').then((mod) => mod.default)
96+
);
97+
const IconCanary = dynamic(() =>
98+
import('../Icon/IconCanary').then((mod) => mod.IconCanary)
99+
);
100+
const IconExperimental = dynamic(() =>
101+
import('components/Icon/IconExperimental').then((mod) => mod.IconExperimental)
102+
);
48103

49104
function CodeStep({children, step}: {children: any; step: number}) {
50105
return (

0 commit comments

Comments
 (0)