实时预览
Schema Element Editor 提供实时预览功能,让您在编辑 Schema 时能够立即看到效果。
功能概述
预览功能支持两种模式:
| 模式 | 说明 |
|---|---|
| 宿主预览 | 由宿主页面提供的自定义预览组件 |
| 内置预览 | 插件内置的 Markdown 预览器(fallback) |
使用方法
打开预览
- 在编辑器工具栏点击「预览」按钮
- 或使用快捷键
Alt + P
预览开启后:
- 抽屉宽度会扩展到全屏
- 左侧显示预览区域
- 右侧显示编辑器
关闭预览
- 再次点击「预览」按钮
- 或使用快捷键
Shift + Alt + P
调整布局
预览和编辑器之间有一个可拖拽的分隔条:
- 将鼠标移到分隔条上(光标变为调整样式)
- 按住并拖动可调整左右比例
- 最小宽度为 20%
预览更新
手动更新
默认情况下,预览需要手动更新:
- 点击预览区域的「刷新」按钮
- 或使用快捷键
Alt + P
自动更新
启用自动更新后,编辑器内容变化时预览会自动刷新(带防抖)。
在配置页面「实时预览」→「预览行为」中开启「自动更新预览」。
更新防抖
为避免频繁渲染,预览更新有防抖延迟:
- 默认延迟:500ms
- 可配置范围:100ms - 2000ms
在「更新防抖」配置项中调整。
内置预览器
当宿主页面未提供预览函数时,插件会使用内置的 Markdown 预览器。
支持的内容类型
| 类型 | 支持 | 说明 |
|---|---|---|
| AST (Elements[]) | ✅ | 渲染为格式化的结构视图 |
| RawString (Markdown) | ✅ | 渲染为 Markdown 预览 |
| JSON (Object) | ❌ | 不支持,请使用宿主预览 |
启用/禁用
在配置页面「实时预览」→「预览行为」→「启用内置预览器」中设置。
默认开启。
宿主预览
如果您需要自定义的预览效果,宿主页面可以提供预览函数。
实现方式
postMessage 模式(推荐):
import { useSchemaElementEditor } from '@schema-element-editor/host-sdk'
useSchemaElementEditor({
getSchema: (params) => dataStore[params],
updateSchema: (schema, params) => { /* ... */ },
// 提供预览函数
renderPreview: (schema, containerId) => {
const container = document.getElementById(containerId)
const root = ReactDOM.createRoot(container)
root.render(<YourPreviewComponent data={schema} />)
// 返回清理函数
return () => root.unmount()
},
})
详细说明请参阅 SDK 使用指南。
配置选项
预览行为
| 配置项 | 说明 | 默认值 |
|---|---|---|
| 启用内置预览器 | 当宿主未提供预览函数时使用内置预览 | 开启 |
| 自动更新预览 | 内容变化时自动更新预览 | 关闭 |
| 更新防抖 | 编辑后多久更新预览 | 500ms |
| 预览区域宽度 | 预览区域占抽屉的百分比 | 40% |
层级配置
| 配置项 | 说明 | 默认值 |
|---|---|---|
| 默认 z-index | 非预览模式下的层级 | 2147483646 |
| 预览模式 z-index | 预览容器的层级 | 999 |
预览按钮显示
如果不需要预览功能,可以隐藏预览按钮:
- 打开配置页面
- 找到「功能开关」→「工具栏按钮」
- 关闭「预览」开关
故障排除
预览按钮灰色/禁用
可能的原因:
- 宿主页面未提供预览函数
- 内置预览器已禁用
- 当前内容类型不支持预览(JSON 对象)
解决方案:
- 添加预览函数
- 在配置中启用内置预览器
- 确认数据类型是 AST 或 RawString
预览显示空白
可能的原因:
- 预览函数执行出错
- 容器 ID 获取失败
解决方案:
- 检查浏览器控制台是否有错误
- 确认预览函数正确获取容器
预览更新延迟
如果预览更新太慢:
- 减小「更新防抖」时间
- 开启「自动更新预览」
如果预览更新太频繁导致卡顿:
- 增大「更新防抖」时间
- 关闭「自动更新预览」,改为手动刷新
预览样式异常
预览容器是在宿主页面的 DOM 中创建的,可以正常使用宿主页面的样式。
如果预览样式显示异常,可能的原因:
- 预览组件缺少必要的样式依赖
- CSS 选择器优先级问题
- 预览组件使用了相对路径的资源
解决方案:
- 确保预览组件引入了所需的样式文件
- 在预览函数中显式导入样式或使用内联样式
- 检查预览组件是否有 CSS-in-JS 等样式方案