Skip to content

使用设计态渲染器

设计态渲染器是 EasyEditor 设计环境中的核心组件,负责将组件库和设计器关联起来,提供拖拽、选中、调整大小等交互能力。本文将指导你如何在项目中正确使用设计态渲染器。

基本使用

引入渲染器

首先,需要引入对应的设计态渲染器组件和样式:

tsx
// 导入设计态渲染器组件
import { SimulatorRenderer } from '@easy-editor/react-renderer-dashboard'

配置渲染器

设计态渲染器需要连接到 simulator 实例:

tsx
import { simulator } from './editor'

const DesignEditor = () => {
  return (
    <div className="design-editor">
      <SimulatorRenderer host={simulator} />
    </div>
  )
}

配置项

host (必需)

设计态渲染器需要连接到simulator实例,通过host属性传入。

tsx
<SimulatorRenderer host={simulator} />

bemTools (可选)

配置BEM工具的行为和显示,可以设置为对象或false。如果设置为false,将完全禁用BEM工具功能。

tsx
// 启用并配置 bemTools 工具
<SimulatorRenderer
  host={simulator}
  bemTools={{
    // 是否启用hover组件功能
    detecting: true,

    // 是否启用调整组件大小功能
    resizing: true,

    // 是否启用选中组件功能
    selecting: true,

    // 是否显示参考线
    guideLine: true,

    // 自定义额外内容
    extra: <CustomToolbar />
  }}
/>
tsx
// 完全禁用BEM工具
<SimulatorRenderer
  host={simulator}
  bemTools={false}
/>

自定义辅助工具

你可以通过 bemTools.extra 属性来添加自定义的辅助工具:

tsx
import { SimulatorRenderer } from '@easy-editor/react-renderer-dashboard'
import { simulator } from './editor'

// 自定义辅助工具组件
const CustomTools = () => {
  return (
    <div className="custom-tools">
      <button
        className="tool-button"
        onClick={() => {
          // 获取当前选中的节点
          const selectedNode = simulator.designer.selection.selected[0]
          if (selectedNode) {
            // 执行自定义操作
            console.log('Selected node:', selectedNode.id)
          }
        }}
      >
        自定义工具
      </button>
    </div>
  )
}

const DesignEditor = () => {
  return (
    <div className="design-editor">
      <SimulatorRenderer
        host={simulator}
        bemTools={{
          // 添加自定义工具
          extra: <CustomTools />
        }}
      />
    </div>
  )
}

设备视口配置

设计态渲染器会根据画布大小自动调整缩放比例,以适应不同的视口尺寸。默认视口大小为 1920x1080,可以通过以下方式自定义:

ts
// 自定义设备视口大小
simulator.set('deviceStyle', {
  viewport: {
    width: 1920,
    height: 1080,
  },
})

designMode 切换

设计态渲染器会根据 simulator 的 designMode 来决定是否展示辅助工具:

tsx
import { SimulatorRenderer } from '@easy-editor/react-renderer-dashboard'
import { simulator } from './editor'
import { useState } from 'react'

const DesignEditor = () => {
  const [isDesignMode, setIsDesignMode] = useState(true)

  const toggleMode = () => {
    // 切换设计模式/运行模式
    simulator.set('designMode', isDesignMode ? 'live' : 'design')
    setIsDesignMode(!isDesignMode)
  }

  return (
    <div className="design-editor">
      <div className="toolbar">
        <button onClick={toggleMode}>
          {isDesignMode ? '运行模式' : '设计模式'}
        </button>
      </div>
      <SimulatorRenderer host={simulator} />
    </div>
  )
}

渲染器内部结构

设计态渲染器的 DOM 结构如下:

html
<div class="easy-editor">
  <!-- 画布区域 -->
  <div class="easy-editor-canvas easy-editor-device-default-canvas">
    <!-- 视口区域 -->
    <div class="easy-editor-viewport easy-editor-device-default-viewport">
      <!-- 辅助工具 -->
      <div class="easy-editor-bem-tools">
        <!-- 各种辅助工具 -->
        <div class="easy-editor-border-detecting"></div>
        <div class="easy-editor-border-selecting"></div>
        <div class="easy-editor-border-resizing"></div>
        <div class="easy-editor-guide-line"></div>
        <!-- 自定义工具 -->
      </div>
      <!-- 内容区域 -->
      <div class="easy-editor-content"></div>
    </div>
  </div>
</div>

了解这个结构有助于你通过 CSS 自定义渲染器的样式和行为。

Released under the MIT License.