Word Press富文本控件的保存

新建富文本编辑器,并编写save方法如下:

edit方法:

js 复制代码
export default function Edit({ attributes, setAttributes }) {
	return (
		<>
		<div { ...useBlockProps() }>
			<RichText
				tagName='p'
				onChange={ (value) => setAttributes({ noteContent: value })}
				value={attributes.noteContent}
				placeholder='输入你的内容...'
				>

			</RichText>
			<div>自定义的按钮</div>
		</div>
		</>
	);
}

save方法:

js 复制代码
import { useBlockProps } from '@wordpress/block-editor';

export default function save({ attributes }) {

    const { noteContent } = attributes;

    return (
        <div { ...useBlockProps.save() }>
            { noteContent }
        </div>
    );
}

看上去很好理解,将RichText标签解析成div,将内容保存在div内部。

报错

此时保存刷新:

报错内容:

text 复制代码
区块包含未预料的或无效的内容。

此时打开控制台能够看到报错的log:

text 复制代码
Content generated by `save` function:

<div class="wp-block-ht-ht-note">&lt;div class="wp-block-ht-ht-note">测试&lt;/div></div>

Content retrieved from post body:

<div class="wp-block-ht-ht-note">测试</div>

现象

出现这种报错通常原因是save方法和edit方法结果没有对上。本来是一个挺常见的bug。通常需要简单修改一下就能正常使用了。

但这次有些不太一样。仔细观察报错日志:

text 复制代码
save()方法保存的内容:
<div class="wp-block-ht-ht-note">
<div class="wp-block-ht-ht-note">
测试
</div>
</div>

edit()方法保存的内容:
<div class="wp-block-ht-ht-note">
测试
</div>

也就是save()方法保存了两次{ ...useBlockProps() }

原因

保存了两次,我们要搞清楚是从哪里来的。

第一次的div

这个很好理解,毕竟save方法使用了<div { ...useBlockProps.save() }>。使用这种方式就会解析成<div class="wp-block-ht-ht-note">

第二次的div

剩下的那也就能正常推断出来了:除了save方法使用的,就只可能是{noteContent}中本身的内容了。通过<div class="wp-block-ht-ht-note">&lt;div class="wp-block-ht-ht-note">测试&lt;/div></div>的转义内容也能够推断出,{noteContent}是包含着一个<div class="wp-block-ht-ht-note">

解决方案

知道原因就好解决了,既然保存时就带上了,那save()方法就不需要再添加一次了。

修改save()方法:

js 复制代码
export default function save({ attributes }) {

    const { noteContent } = attributes;

    return (
        <>
            { noteContent }
        </>
    );
}

保存刷新,解决。

相关推荐
richdata14 小时前
动态OTB vs 静态OTB:鞋服零售该选哪种管理模式?
前端·html·零售
FungLeo19 小时前
Flutter Web 中文字体困境与渲染器选择:CanvasKit vs HTML renderer 实战
前端·flutter·html
3A Cloud21 小时前
从王虹的手写报告到可运行的 HTML 幻灯片:拆解 z-wanghong-handwritten-ppt
前端·人工智能·笔记·信息可视化·html·powerpoint·ppt
农村小镇哥1 天前
怎么把HTM格式转化成WORD
ui·c#·word
IMPYLH1 天前
HTML 的 <embed> 元素
前端·数据库·html
AC赳赳老秦1 天前
网页公开附件自动采集:OpenClaw 批量下载页面内嵌 Word/Excel 附件,统一格式后结构化入库
java·python·word·php·excel·deepseek·openclaw
必须会一定会1 天前
用纯 HTML/JS 做一个 AI 需求澄清器:把模糊想法转换成可执行任务书
开发语言·前端·javascript·人工智能·html·ai编程
asdzx672 天前
Java 实战:基于 Spire.Doc 高效提取 Word 文档文本与图片
java·c#·word
VBAMatrix2 天前
表格导航!实现Word合并附注与多个Excel的数据同步
word·excel·审计报告·审计·会计师事务所·报告工具
2401_881828322 天前
简易文本处理网页工具|AI 通识课第三次作业
前端·javascript·html