# 常见问题

> Fabric.js 常见问题：画布怎么保存为 JSON、怎么加撤销重做、怎么保留自定义属性、怎么配合 React 和导出图片。

Source: https://fabricjs-document-engine.jscrate.dev/zh/docs/overview/faq
Last updated: 2026-09-28

这份 Fabric.js 常见问题汇总了开发者搜得最多的问题。每个回答都链接到详细讲解的页面。

## 画布怎么保存为 JSON 再加载回来？

调用 `engine.toDocument()` 把画布保存为 JSON，调用 `engine.loadDocument(json)` 加载回来。接了存储适配器后，用 `engine.save()` 和 `engine.load(id)`。详见[保存和加载](https://fabricjs-document-engine.jscrate.dev/zh/docs/guides/save-and-load)。

## Fabric.js 有撤销重做吗？

没有。Fabric.js 本身没有历史记录。这个包会为每个用户操作记录一步撤销重做，你只要调用 `engine.undo()` 和 `engine.redo()`。详见[撤销和重做](https://fabricjs-document-engine.jscrate.dev/zh/docs/guides/undo-redo)。

## 为什么加载后自定义属性丢了？

Fabric.js 只保存它认识的属性。把你的类和额外的属性注册一次，引擎每次保存和加载都会保留它们。详见[自定义对象](https://fabricjs-document-engine.jscrate.dev/zh/docs/guides/custom-objects)。

## 怎么按 id 找到对象？

每个对象都有稳定的 `id`。调用 `engine.getObjectById(id)`，编组里的对象也能找到。

## 能配合 React、Vue 或 Svelte 用吗？

可以。React 有专门的 hooks，在 `fabricjs-document-engine/react` 里。Vue、Svelte 等框架用 `createDocumentStateStore(engine)`。详见 [React](https://fabricjs-document-engine.jscrate.dev/zh/docs/frameworks/react)、[Vue](https://fabricjs-document-engine.jscrate.dev/zh/docs/frameworks/vue) 和 [Svelte](https://fabricjs-document-engine.jscrate.dev/zh/docs/frameworks/svelte)。

## 能在 Next.js 里用吗？

可以。React 入口已标记 `'use client'`。Fabric.js 需要浏览器环境，所以要在客户端组件里渲染编辑器。详见 [Next.js](https://fabricjs-document-engine.jscrate.dev/zh/docs/frameworks/next-js)。

## 支持哪些 Fabric.js 版本？

Fabric.js 6 和 7。Fabric.js 5 保存的普通 JSON 也能打开。详见[兼容性](https://fabricjs-document-engine.jscrate.dev/zh/docs/production/compatibility)。

## 需要服务器吗？

不需要。内置的 localStorage 适配器不依赖服务器。真实项目里，用两个函数给你自己的 API 写一个存储适配器即可。详见[自定义后端](https://fabricjs-document-engine.jscrate.dev/zh/docs/storage/custom-backend)。

## 导出时为什么报画布被污染（tainted canvas）？

有一张来自其他网站的图片没有开启 CORS。引擎会在导出前检查，并告诉你是哪张图片。详见[导出](https://fabricjs-document-engine.jscrate.dev/zh/docs/guides/export)。

## 两个人能同时编辑吗？

不能实时协作。引擎会发现另一个标签页或设备先保存了，并让用户选择重新加载或保留自己的版本。详见[保存冲突](https://fabricjs-document-engine.jscrate.dev/zh/docs/guides/save-conflicts)。

## 免费吗？

免费，使用 MIT 许可证。如果这份 Fabric.js 常见问题没有解答你的疑问，请[在 GitHub 上提 issue](https://github.com/re-sohail/fabricjs-document-engine/issues)。
