WordPress Gutenberg:multiline="p"的RichText如何设置children默认值
问题根源
当RichText启用multiline="p"属性时,组件的内部数据结构会切换为多段落独立节点渲染模式,要求传入的value值必须是和DOM结构匹配的、由多个<p>标签虚拟节点组成的数组,和非multiline模式下的纯文本取值逻辑完全不同。
你之前尝试的所有默认值配置,均不匹配multiline模式下的合法数据结构,因此无法被正常渲染:
default: 'Lorem Ipsum Dolor Sit Amet'是纯字符串,multiline模式下RichText无法将单字符串拆解为合法的p段落节点,会直接判定内容为空,仅显示占位提示文本default: ['Lorem Ipsum Dolor Sit Amet', 'test', 'test2']虽然是数组结构,但数组元素是纯文本字符串,没有对应p标签的节点包裹结构,不符合source: 'children'的取值规则default: () => <p>...</p>、default: [() => <p>...</p>]这类函数式配置,因为Gutenberg块属性的default值要求是可序列化的静态内容,不支持传入React渲染函数、组件类这类非可序列化对象,区块初始化逻辑根本不会读取这类值
移除multiline="p"后默认值可正常显示,是因为非multiline模式下RichText直接接收纯文本字符串作为value,你之前写的字符串类型默认值刚好匹配该模式的取值要求。
可生效的默认值配置方式
需要让默认值完全匹配multiline p模式下的合法数据结构,直接传入带p标签包裹的虚拟节点数组即可,写法如下:
attributes: { text: { type: 'array', source: 'children', selector: 'div', // 匹配多段落模式的取值结构 default: [ <p key="default-content">Lorem Ipsum Dolor Sit Amet</p> ] }, },
注意:所有虚拟节点需要携带稳定的key属性,避免Gutenberg在区块更新时出现渲染diff报错,不要用匿名函数包裹内容。
内容的提问来源于stack exchange,提问作者GWorking
相关产品推荐
相关产品推荐

