You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改react-email-editor加载空设计时的默认静态提示文本?

如何修改react-email-editor加载空设计时的默认静态提示文本?

我太懂你这种需求了——想换掉那个默认的空状态提示,还要是静态不可编辑的,不能让用户把它当成设计内容改来改去。之前你试的那几种方法要么变成可编辑文本,要么被CORS卡脖子,确实挺闹心的。下面给你两个亲测有效的方案,应该能解决你的问题:

方案一:利用编辑器内置的空状态配置(最推荐)

react-email-editor本质是封装了Unlayer编辑器,而Unlayer本身就支持自定义空状态的文本和样式,完全不用碰DOM或者CORS的问题。你只需要在渲染EmailEditor组件时,通过config属性传递emptyState配置项就行:

import EmailEditor from 'react-email-editor';

function MyEmailEditor() {
  return (
    <EmailEditor
      ref={editorRef}
      config={{
        emptyState: {
          text: "这里还没有内容,从右侧拖拽组件开始设计吧😊",
          style: {
            color: "#999",
            fontSize: "16px",
            textAlign: "center",
            padding: "40px 20px"
            // 还可以自定义更多样式,比如字体、行高、背景色等
          }
        }
      }}
      // 其他你已有的配置项...
    />
  );
}

这个配置会直接替换默认的提示文本,而且是编辑器内置的静态提示,不会变成可编辑的内容,完美符合你的需求。

方案二:在React组件层做条件渲染占位符

如果上面的内置配置因为react-email-editor版本过旧不生效,那可以换个思路:在编辑器容器外面加一个自定义的静态提示,初始时显示,当编辑器有内容或者用户开始操作时自动隐藏。

具体步骤和代码示例如下:

import { useState, useRef } from 'react';
import EmailEditor from 'react-email-editor';

function MyEmailEditor() {
  const [isEmptyDesign, setIsEmptyDesign] = useState(true);
  const editorRef = useRef(null);

  const handleReady = () => {
    // 编辑器加载完成后,监听设计变化事件
    editorRef.current.editor.subscribe('design:updated', () => {
      // 检查当前设计是否有内容
      const hasContent = Object.keys(editorRef.current.editor.getDesign()).length > 0;
      setIsEmptyDesign(!hasContent);
    });
  };

  const handleDesignLoad = (design) => {
    // 加载外部设计时,判断是否为空
    setIsEmptyDesign(Object.keys(design).length === 0);
  };

  return (
    <div style={{ position: 'relative', width: '100%', height: '600px' }}>
      {/* 自定义静态提示层,覆盖在编辑器上方 */}
      {isEmptyDesign && (
        <div style={{
          position: 'absolute',
          top: 0,
          left: 0,
          width: '100%',
          height: '100%',
          display: 'flex',
          alignItems: 'center',
          justifyContent: 'center',
          background: '#fff',
          zIndex: 10,
          pointerEvents: 'none' // 关键:让点击事件能穿透到下面的编辑器
        }}>
          <p style={{ color: '#999', fontSize: '16px', margin: 0 }}>这里还没有内容,从右侧拖拽组件开始设计吧😊</p>
        </div>
      )}

      <EmailEditor
        ref={editorRef}
        onReady={handleReady}
        onDesignLoad={handleDesignLoad}
        // 其他你已有的配置项...
      />
    </div>
  );
}

这个方法完全不受编辑器iframe的限制,你可以自定义任何样式的提示(比如加图标、调整间距),pointerEvents: 'none'这个样式很重要,它能让用户直接点击下面的编辑器,不会被提示层挡住操作。

之前你用JSON加文本块的方法确实会变成可编辑内容,不是最优解。上面这两个方案里,方案一是官方支持的正规方式,最省心;方案二更灵活,适合需要高度自定义提示样式的场景,你可以根据自己的react-email-editor版本选合适的方法。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 14:38:01