文档
高级
Next.js 和 BlockNote

Next.js 和 BlockNote

BlockNote 是一个仅应在客户端渲染(而非服务器端渲染)的组件。如果你使用 Next.js,需要确保 Next.js 不会尝试将 BlockNote 作为服务器端组件进行渲染。

请确保在 客户端组件 (opens in a new tab) 中使用 BlockNote。你可以通过为你的组件创建一个单独的文件(确保此文件位于 pagesapp 目录之外,比如 components/Editor.tsx),并以 "use client"; 指令 (opens in a new tab) 开头来实现:

"use client"; // 这将把 <Editor> 注册为客户端组件
import "@blocknote/core/fonts/inter.css";
import { useCreateBlockNote } from "@blocknote/react";
import { BlockNoteView } from "@blocknote/mantine";
import "@blocknote/mantine/style.css";
 
// 我们的 <Editor> 组件,稍后可以复用
export default function Editor() {
  // 创建一个新的编辑器实例。
  const editor = useCreateBlockNote();
 
  // 使用 React 组件渲染编辑器实例。
  return <BlockNoteView editor={editor} />;
}

动态导入(Dynamic Import)

在同一目录下,创建一个名为 DynamicEditor.tsx 的新文件: 这里我们将使用 动态导入 (opens in a new tab) 来确保 BlockNote 仅在客户端导入。

你可以在页面中通过 next/dynamic 导入刚刚创建的组件:

"use client";
 
import dynamic from "next/dynamic";
 
export const Editor = dynamic(() => import("./Editor"), { ssr: false });

在页面 / 应用中导入

现在,你可以在页面或应用中导入动态编辑器:

import { Editor } from "../components/DynamicEditor";
 
 
function App() {
  return (
    <div>
      <Editor />
    </div>
  );
}

React 19 / Next 15 严格模式(StrictMode)

BlockNote 目前尚不支持 React 19 / Next 15 严格模式。暂时请在你的 next.config.ts 中禁用严格模式:

...
reactStrictMode: false,
...

这将解决你在 Next.js React 应用中嵌入 BlockNote 时可能遇到的任何问题!