React 页面构建器

构建一个React页面构建器不用从零开始构建编辑器

用 React 和 GrapesJS 构建一个可嵌入的可视化页面构建器。从开源编辑器核心开始,然后通过插件添加模块、响应式控件、存储、模板和邮件功能。

开源自托管可嵌入可扩展性React 与 Next.js
your-app.com/editor
React

方块

  • 英雄
  • 正文
  • 图片
  • 按钮
  • 卡牌
  • 柱子

你的页面

英雄部分
用户看到的编辑器——挂载在你自己的React应用中,在你自己的域中。

26k+

GitHub 星

100+

GJS.Market 上的插件

1.4M+

npm 下载量/月

$0

编辑许可费

先去看

一个 React 页面构建器,正在运行

打开全屏

未修改的开源编辑器。这是本页其他所有内容的基础——画布、块、样式管理器、设备切换、撤销/重做、导出。

grapesjs.com/demo.html免费

从第三方演示网站加载实时编辑器。除非你要求,否则什么都不会被加载。

定义

什么是React页面构建器?

React 页面构建器是一种嵌入 React 应用程序中的可视化编辑界面,允许用户创建、修改和排列页面内容,而无需手动编写 HTML 和 CSS。

关键词是embedded。React页面构建器不是用户访问的独立网站——它是产品内部、登录、写入数据库的路径。

三层负责工作,且属于三个不同的所有者。混淆它们是页面构建器项目停滞的最常见原因。

应用层

React / Next.js

你的应用界面、认证、路由、计费、用户、权限和API。编辑器是其中一条路径,不是整个产品。

编辑图层

GrapesJS

可视化画布、组件、块、样式、拖放、命令和序列化。那部分需要几个月写,几年才能加固。

持久化层

你的后台

项目存储、用户、权限、发布和业务逻辑。编辑器会把JSON和HTML交给你;文件放哪里、谁能看到,都是你的。

范围

React 页面构建器不仅仅是拖拽操作

一个你可以放盒子的画布,就是一个周末。以下所有内容就是将原型变成你可以展示给付费客户的东西——而清单上的每一项都是必须有人构建、测试并持续工作的子系统。

  • 视觉画布GrapesJS 核心
  • 组成部分GrapesJS 核心
  • 方块GrapesJS 核心
  • 拖拽GrapesJS 核心
  • 风格经理GrapesJS 核心
  • 响应式剪辑GrapesJS 核心
  • 资产GrapesJS 核心
  • 富文本GrapesJS 核心
  • 撤销/重做GrapesJS 核心
  • 存储GrapesJS 核心
  • 设备GrapesJS 核心
  • 出口GrapesJS 核心
  • 插件系统GrapesJS 核心
  • 页面插件
  • 模板插件
  • 权限你的申请
  • 出版你的申请
谁来建造它你的申请GrapesJS 核心插件

制作第一个拖放原型相对容易。围绕它打造的编辑器在生产中可靠的部分是成本最高的部分。

构建与采用

为什么要从零开始构建编辑器?

写自己的编辑器是有充分理由的:你的编辑模型确实与现有任何东西都不同。除此之外,以下是这三种路径对团队的实际要求。

选项A

从零开始构建

你拥有所有层级,包括那些与你的产品无关的层级。

你实现并维护

  • 画布与选片
  • 拖放加嵌套规则
  • 组件系统
  • 块形调色板
  • 风格经理
  • 响应式控制
  • 资产管理
  • 富文本编辑
  • 撤销/重做历史
  • 存储与自动保存
  • HTML / CSS 导出
  • 模板与页面
  • 跨浏览器测试
  • 持续维护

这些都是可能回归的子系统,没有一个能区分你的产品。

选项B

从GrapesJS开始

建立编辑基础,并围绕它构建你的申请。

你实现

  • 在你的React应用中挂载编辑器
  • 你的产品所需的阻挡
  • 存储与您自己的API
  • 发布你的编辑输出
  • 你自己的画布界面

编辑器不再是一个项目。它变成了一个你配置的依赖。

请参见代码
选项C

用GJS.Market延伸

在不涉及编辑器架构的情况下添加专业功能。

你安装

  • 模块、预设和模板
  • 页面与项目管理
  • 存储适配器
  • 电子邮件和MJML支持服务
  • 响应式和SEO工具

你接下来写的功能已经发布、定价并可安装。

浏览插件

不要从零开始打造视觉编辑器。要围绕经过验证的编辑器基础打造你的React产品。

堆叠

GrapesJS + React + 插件 = 你的页面构建器

每个图层只有一个任务。保持它们分开,整个过程都能被替换——包括编辑器,这也是使用标准编辑器的意义所在。

编辑引擎

GrapesJS

Canvas、组件、块、样式、命令、序列化。开源,自架,免许可费。

应用层

React / Next.js

你的仪表盘、认证、路由、计费和API。编辑器是你应用内的一个路由。

功能层

GJS.Market

你接下来会构建的功能——页面、模板、存储、邮件、SEO。

等于
你的产品

你的React页面构建器

  • SaaS页面构建器
  • 网站建设器
  • CMS 可视化编辑器
  • 着陆页构建器
  • 电子邮件生成器
从代码开始
结果

用React页面构建器能构建什么?

同一个编辑器核心,指向五个不同的产品。它们之间变化的是模块、存储模型和输出——而不是编辑器。

建筑

React 与 GrapesJS 如何协同工作

编辑器是一个组件,而不是目的地。 它安装在你已有的路由中,紧邻你的应用其他部分。你的用户永远不会离开你的产品,你的会话已经有效,它生成的内容直接进入你的数据库。
  1. React / Next.js
  2. GrapesJS
  3. Your backend

这让评估托管平台的团队感到惊讶的是:没有第二系统需要保持同步,因为根本没有第二系统。

数据是向动的:你的应用挂载编辑器,编辑器交还项目,后端存储它。

比较

React 页面构建器对比

五个工具都自称为React的可视化编辑器,且不可互换。以下每个单元格均取自每个项目的文档或已发布的包元数据。

能力GrapesJSPuckCraft.jsBuilder.ioPlasmic
React 积分官方包装React 原生 APIReact 原生 APIReact SDKReact SDK + codegen
许可BSD-3-Clause core, MIT React wrapperMITMITMIT SDK, hosted platformMIT
自主机编辑器✓ — 完全运行在你的应用中——托管平台部分 — 工作室自建有文档
嵌入你自己的应用界面通过积分企业 — 白标与嵌入
视觉画布✓ — 同原点iframe✓ — 你提供周围的UI。
拖拽
自定义组件✓ — 自定义组件类型✓ — config + render function✓ — 用户组件✓ — 注册组件✓ — 代码组件
你的React组件在画布中渲染出来通过积分——画布渲染DOM✓ — 本地✓ — 本地
现成编辑器界面✓ — 默认界面包含—— 你构建了用户界面✓ — 托管用户界面✓ — 主办演播室
任意CSS样式管理器✓ — 风格经理习俗习俗
响应式/视口编辑✓ — 设备管理器✓ — 视窗习俗
坚持保存到你自己的数据库✓ — 存储管理器 + 自定义适配器✓ — 你拥有数据✓ — 序列化为JSON——内容存在于Builder中具体情况是——项目在Plasmic中运行
HTML / CSS 导出✓ — getHtml() / getCss()习俗习俗看情况✓ — 代码生成
插件生态系统✓ — GJS.Market, 100+ plugins✓ — 插件API
白标这取决于计划企业号
电子邮件(MJML / 通讯)✓ — MJML 及通讯预设习俗习俗—— 已弃用的电子邮件模型
为你自己的终端客户嵌入这取决于计划企业号
最新发布0.23.6 · 2026-08-250.23.0 · 2026-08-070.2.12 · 2025-02-149.4.4 · 2026-09-022.0.26 · 2026-09-02

✓ = 文档化能力。自定义 = 支持,但你实现了。通过集成 / 依赖 / 企业 = 在供应商设定的条件下可用。— = 未提供,或未作为产品本身能力文档。
将2026-09-02与每个项目的官方文档、npm注册表元数据和GitHub仓库对照。产品功能和定价随时间变化——在做出架构决策前请查看当前文档。

选择

你应该选择哪款React页面构建器?

这些问题没有绝对优越。它们是对不同问题的回答,而你真正问的问题通常写下来后很明显。

真心合适

GrapesJS 何时合适——何时不合适

三种结果,其中一种不是GrapesJS。如果比较页面无法告诉你何时该放弃,那就不是比较。

很合适

你是在打造一个产品,编辑是其中的一个特点

编辑者隐藏在你的登录信息后面,写入你的数据库,承载你的品牌形象。你预计会持续扩展多年。

  • 自托管是要求,而非偏好
  • 你需要可以渲染的 HTML/CSS 输出
  • 编辑最终需要页面、模板或电子邮件
  • 你需要一个插件表面而不是分支
别去找

你的编辑单元是一个React组件,而不是一个页面

如果用户配置的是你已经发布的组件实例,且明确不希望自由形式样式,那么以React为先的编辑器会比一般的可视化编辑器更自然。

  • 编辑就是填充打字道具,而不是移动框框
  • 你的设计系统是刻意的约束
  • 你根本不需要任意的CSS
还没

你不确定用户会编辑什么

内容模型决定了编辑器,而不是反过来。在你还不知道产品中“页面”是什么之前就选了编辑器,是这些项目最常被重写的方式。

  • 写下用户能创建的内容和不能创建的内容
  • 在选择内容编辑方式之前,先确定内容的归属
  • 在投入前用空闲核心做原型
实现

打造你的第一个React页面构建器

两个包和一个组件。 封装器不捆绑核心库,所以两个都安装。下面的示例按写法运行——@grapesjs/react 封装器要求显式传递核心,这是大多数第三方教程省略的步骤。

npm i grapesjs @grapesjs/react
components/page-builder.tsxtsx
'use client';

import grapesjs, { type Editor } from 'grapesjs';
import GjsEditor from '@grapesjs/react';
import 'grapesjs/dist/css/grapes.min.css';

export default function PageBuilder() {
  const onEditor = (editor: Editor) => {
    // The full GrapesJS API is yours from here: Blocks, Pages,
    // DeviceManager, Commands, StorageManager.
    editor.Blocks.add('hero', {
      label: 'Hero',
      category: 'Sections',
      content: '<section class="hero"><h1>Headline</h1></section>',
    });
  };

  return (
    <GjsEditor
      // Required. The wrapper does not bundle the core library.
      grapesjs={grapesjs}
      options={{
        height: '100vh',
        // Persistence is wired separately — see the storage step below.
        storageManager: false,
      }}
      onEditor={onEditor}
    />
  );
}

每个部件的作用

画布

可视化编辑表面。它在iframe内渲染DOM,这也是为什么样式不能从你的应用中泄漏。

方块

用户从调色板拖拽出来。在这里注册你的产品板块,它们就会变成可编辑的内容。

存储

将项目持久化到你自己的后端。本地和远程适配器都是内置的;自定义适配器则需要负载和存储方法。

插件

扩展表面。从Tailwind模块到MJML邮件,所有文件都通过这种方式到达,无需分支编辑器。

将项目保存到您自己的数据库

存储是原型的结束和产品的开始。GrapesJS 提供本地和远程存储,并允许你用两种异步方法注册完全自定义的适配器——这样编辑器永远不需要知道你的后端长什么样。

storage.tsts
// Persist projects to your own API. GrapesJS ships `local` and `remote`
// storage; `Storage.add` registers a fully custom adapter.
// Docs: grapesjs.com/docs/modules/Storage.html

const onEditor = (editor: Editor) => {
  editor.Storage.add('api', {
    async load() {
      const res = await fetch(`/api/pages/${pageId}`);
      return res.json(); // → the project JSON GrapesJS restores from
    },
    async store(project) {
      await fetch(`/api/pages/${pageId}`, {
        method: 'PUT',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify(project),
      });
    },
  });
};

// …then point the editor at it:
options={{
  storageManager: { type: 'api', autosave: true, stepsBeforeSave: 5 },
}}

将编辑器输出转化为动态页面

编辑器会把HTML和CSS交还给你。你怎么处理它们,是应用决策:是从Next.js路由渲染,还是推送到CDN,或者以邮件形式发送。编辑器不在服务路径中。

publish.tsts
// Editor output → a production page.
// getHtml/getCss return the exact markup the canvas rendered.

const html = editor.getHtml();
const css = editor.getCss();

await fetch('/api/publish', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ slug, html, css }),
});

// Your app renders it wherever you control — a Next.js route, a CDN
// object, an email send. The editor is not in the serving path.

已与针对React 18/19和Next.js 15的@grapesjs/react 0.23.6进行了验证。有一点需要早点了解:React包装器是构建你的UI的around,而不是渲染React组件的inside。如果在画布中实时渲染React组件是硬性要求,那么优先渲染React的编辑器会更合适,这页对比中说明了这一点。

Next.js

用Next.js吗?

让编辑一直盯着客户端。 React 页面构建器通常嵌入在 Next.js 应用中。编辑器仅支持客户端;你的应用负责服务器端的认证、API、路由及所有相关事务。
  1. Next.js App
  2. Route: /editor
  3. Client component
  4. GrapesJS
应用/编辑器/页面.tsxtsx
// app/editor/page.tsx — the editor is client-only.
// GrapesJS measures the DOM on init, so it must never render on the server.
import dynamic from 'next/dynamic';

const PageBuilder = dynamic(() => import('@/components/page-builder'), {
  ssr: false,
  loading: () => <EditorSkeleton />,
});

export default function EditorRoute() {
  // Auth, params and data fetching stay on the server side of your app.
  return <PageBuilder />;
}

实用笔记

  • 导入编辑器时,用'dynamic(..., { ssr: false })'。GrapesJS 在初始化时测量 DOM,因此服务器渲染会产生水合不匹配。
  • 在“加载”槽中渲染一个骨架。编辑器包很大,路径其他部分闪烁为空。
  • 将认证、参数和数据取用留在路由的服务器端;结果作为prop传递下去。
  • 将编辑器实例从“onEditor”保持在引用中,而不是在状态中——写入状态会在每个编辑器事件中重新渲染树。
  • 懒散加载插件,你不需要第一次绘制。大多数编辑器需要马上做块,MJML则不需要。

编辑器是树叶,不是树干。

路线图

从原型到量产

  1. 1
    01

    安装编辑器

    将GrapesJS集成到你的React应用中的路由中。此时你拥有了一个可用的画布和默认界面——只需一天的努力,而非一个季度的努力。

  2. 2
    02

    定义你的内容模型

    决定产品中页面的定义,用户可以创建哪些页面,以及他们不能触碰的哪些内容。这个决定会限制后续所有内容,所以在写积木之前就先做决定。

  3. 3
    03

    添加块和组件

    把你的产品部分变成模块和自定义组件类型。这时编辑器开始感觉像是产品的一部分,而不是一个通用工具。

  4. 4
    04

    连接存储

    在你自己的API上注册一个存储适配器,支持自动保存和恢复。项目现在属于用户,草稿在关闭标签页后依然存在。

  5. 5
    05

    发布

    将已保存的项目转换为生产页面——如Next.js路由、CDN对象、发送邮件。编辑器不参与服务路径。

延伸

你可能不需要其他页面构建器

大多数“我们需要更换编辑者”的讨论最终都只是关于缺失一项能力。更换编辑者花费四分之一;增加一项能力则花费一个下午。

不要因为缺少一个功能就替换编辑器。扩展编辑器。

市场

用GJS.Market扩展你的React页面构建器

从编辑器核心开始,添加你产品真正需要的功能。以下价格、名称和缩略图均直接来自目录,因此这里不会偏离销售内容。

书库

构建你的React页面构建堆栈

三个购物清单,而不是一堆目录。每个清单都是该产品工作构建中除了免费核心外通常需要的。

实时目录价格。堆叠是建议,不是捆绑——买你需要的零件。

总成本

制作一个React页面构建器需要多少费用?

编辑许可很少是关键数字。这些是每条路线创建的成本中心——故意避免虚构数字,因为只有团队的费率和范围能让数字变得真实。

从零开始构建

你永远付编辑费

初始版本是较小的那一部分。

成本中心

  • 编辑器架构与设计
  • 各子系统的实现
  • 编辑器用户体验,这是一个独立的学科
  • 跨浏览器与回归测试
  • 在非你产品的代码中修复错误
  • 随着需求到来,集成
  • 持续维护,无限期

未来的每一个功能请求都会落到拥有编辑器的团队身上——也就是你。

使用GrapesJS

你付钱是为了整合,而不是发明

编辑到来了;产品工作依然存在。

成本中心

  • 集成到你的React应用中
  • 对设计系统的定制化
  • 后端与存储布线
  • 你的产品专属功能

核心无需支付许可费,上游维护则是别人的工作。

添加插件

你按能力付费一次

购买你即将安排的专题。

成本中心

  • 每个插件一次性成本,按目录价格
  • 构型而非构造
  • 该能力没有附带人员

每个插件都是从路线图中移除一条,而不是添加一项。

参见目录价格

页面构建器中昂贵的部分并不是第一个演示。它包含了让编辑器具备制作准备所需的一切。

分工

打造你的产品。而不是你的编辑基础设施。

这里有一个屏幕展示整个论点。左侧列是只有你能做的工作,因为它是你的产品。另外两列是已经存在的工作。

你的应用和后端
  • 认证谁登录了,以及以谁身份登录。
  • 账单图纸、限额和发票。
  • 用户与权限谁可以编辑哪个项目。
  • 数据库项目和页面真正存在的地方。
  • 出版将保存内容转换为实时网址。
GrapesJS
  • 画布与选片编辑表面和上面的所有东西。
  • 块与拖拽调色板和排序规则。
  • 风格经理每个组件,每个断点CSS。
  • 组件系统带有特征和序列化的类型元素。
  • 编辑与历史富文本、撤销/重做、命令。
GJS.Market
  • 电子邮件输出MJML 和通讯预设。
  • 模板与页面可重复使用的起点,多页项目。
  • SEO与可及性页面上线前进行审计。

页面构建器最昂贵的部分并不是第一个演示。它包含了让编辑器具备生产准备所需的一切——而且几乎没有什么是客户付钱给你的。

受众

谁在打造React页面构建器?

四个团队带着相同要求和截然不同的约束来到本页面。

SaaS创始人

你需要在产品内、域名、品牌下有可视化编辑器——而且不能让客户去第三方平台编辑自己的内容。

产品团队

视觉编辑只是众多功能路线图中的一个功能。你需要它能顺利发布,而不是成为永久的内部平台团队。

代理机构

你为一个又一个客户打造相同的编辑界面。一个可重复使用、可自我托管的基础比任何单一项目都更有价值。

开发者

你需要一个可扩展的编辑器核心,并能完全控制周围的应用,而不是继承别人的产品决策。

判决

找到合适的React页面构建器

三个问题。四个答案中有两个不是GrapesJS。

你需要可视化编辑器在自己的应用里吗?

一眼就能看到每条路径

  • 你需要可视化编辑器在自己的应用里吗? 是的,在我的应用里, 则 用户编辑的内容总是你现有的React组件之一吗? 是的,只限组件结果: 以Puck 为例
  • 你需要可视化编辑器在自己的应用里吗? 是的,在我的应用里, 则 用户编辑的内容总是你现有的React组件之一吗? 不,他们编辑页面和版面, 则 你想自己设计和构建整个编辑器界面吗? 是的,我会构建界面结果: 以Craft.js 为例
  • 你需要可视化编辑器在自己的应用里吗? 是的,在我的应用里, 则 用户编辑的内容总是你现有的React组件之一吗? 不,他们编辑页面和版面, 则 你想自己设计和构建整个编辑器界面吗? 不,我想要一个编辑器界面结果: GrapesJS 适合
  • 你需要可视化编辑器在自己的应用里吗? 不用,托管工具也没问题结果: 考虑一个托管平台
比较

比较React页面构建框架

这些方法都远远超出上述矩阵——数据模型、迁移路径以及其他工具占优的情况。

常见问题

React 页面构建器问题

开始

构建你的React页面构建器

先从 GrapesJS 开始,集成到 React,然后扩展你的编辑器,满足你产品所需的功能。

开发者

开始建造

打开一个实时编辑器,然后快速启动,把一个挂载到你自己的React应用里。

试试GrapesJS
延伸

补充你缺少的内容

模块、页面、模板、存储适配器、MJML电子邮件和SEO工具——按能力定价。

浏览GJS.Market插件
产品团队

需要帮助吗?

在决定使用架构栈之前,先做架构评审、定制编辑器构建,或者第二意见。

咨询GrapesJS专家

打造你的产品。而不是你的编辑架构。