Blog>
Snippets

Dynamic Import of Components in MDX

Illustrate dynamic import and usage of React components in an MDX file within a Next.js application.
import dynamic from 'next/dynamic';
import { Suspense } from 'react';

// Dynamic import of a React component
const DynamicComponent = dynamic(() => import('../components/YourComponent'), {
  loading: () => <p>Loading...</p>,
  ssr: false // This component will be loaded client-side only
});
This code snippet demonstrates how to dynamically import a React component using Next.js's dynamic import function. The imported component will not be server-side rendered and will show a loading message until it's loaded on the client side.
import { MDXProvider } from '@mdx-js/react';

const components = {
  // Maps MDX element to a dynamic component
  YourMDXTagName: DynamicComponent,
};

const MyApp = ({ children }) => (
  <MDXProvider components={components}>
    {children}
  </MDXProvider>
);

export default MyApp;
This code snippet wraps the application with an MDXProvider, mapping MDX custom tags to the dynamically loaded React components, allowing the components to be used within MDX files.
import { MDXProvider } from '@mdx-js/react';
import MyCustomComponent from '../components/MyCustomComponent';

const components = {
  // You could still have regular imports for non-dynamic components
  MyCustomComponent
};

export default function MyMDXLayout(props) {
  return (
    <MDXProvider components={components}>
      <>{props.children}</>
    </MDXProvider>
  );
}
This code illustrates how to create a layout component for MDX pages that includes both regular imported components and dynamic components in the components object. This allows the use of these components within MDX content.
<Suspense fallback={<div>Loading...</div>}>
  <DynamicComponent />
</Suspense>
This is a JSX example for using the dynamic component inside a React component. It's wrapped with Suspense to display a fallback UI while the dynamic component is being loaded.
export default function MDXPage() {
  return (
    <main>
      <h1>My MDX Page</h1>
      <section>
        {/* Here we use the imported dynamic component within MDX content */}
        <DynamicComponent />
      </section>
    </main>
  );
}
This piece of code is how you would use the dynamic component within the context of a Next.js page. The DynamicComponent is placed within the JSX structure of the page, providing seamless integration.