Использование MDX с NextJS 13 возвращает ошибку useContext

Я пытаюсь использовать файлы mdx в Next.js 13. Я уже выполнил всю необходимую настройку в next.config и создал файл. Внутри папки приложения у меня есть > документы > компоненты > аккордеон > page.mdx

Файл подкачки отображает только заголовок типа «# Title». Когда я перехожу по этому URL-адресу, я получаю следующую ошибку:

node_modules/@mdx-js/react/lib/index.js (34:26) @ Ошибка React — createContext работает только в клиентских компонентах. Добавьте директиву «use client» вверху файла, чтобы использовать его. Подробнее: https://nextjs.org/docs/messages/context-in-server-component

Как я могу это исправить?

мой следующий.config.js

const withMDX = require('@next/mdx')({
  extension: /\.mdx?$/,
  options: {
    remarkPlugins: [],
    rehypePlugins: [],
  },
})

/** @type {import('next').NextConfig} */
const nextConfig = {
  pageExtensions: ['ts', 'tsx', 'js', 'jsx', 'md', 'mdx'],
  experimental: {
    appDir: true,
  },
}

module.exports = withMDX(nextConfig)

Где вы используете mdx в коде?

Youssouf Oumar 03.04.2023 06:14

@YoussoufOumar, как я уже сказал, внутри приложения> документы> компоненты> аккордеон> page.mdx Содержимое файла — это просто заголовок. # Заголовок

Felipe Gouvêa 03.04.2023 14:06
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
1
2
212
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Обязательно добавьте в корень вашего проекта файл mdx-components.tsx:

import type { MDXComponents } from "mdx/types";

// This file is required to use MDX in `app` directory.
export function useMDXComponents(components: MDXComponents): MDXComponents {
  return {
    // Allows customizing built-in components, e.g. to add styling.
    // h1: ({ children }) => <h1 style = {{ fontSize: "100px" }}>{children}</h1>,
    ...components,
  };
}

Кроме того, мой next.config.js выглядит так (так же, как в приведенном ниже примере), но я пробовал с вашим, и он также работает нормально:

/** @type {import('next').NextConfig} */
const nextConfig = {
  experimental: {
    appDir: true,
  },
};

const withMDX = require("@next/mdx")();
module.exports = withMDX(nextConfig);

Также вы можете взглянуть на этот пример: https://github.com/vercel/next.js/tree/canary/examples/app-dir-mdx

Другие вопросы по теме