当我在Gutenberg块的属性中设置默认值时,这些值可以在客户端上使用,但它不会出现在JSON数据中,直到我用setAttributes
.
当我们注册每个页面加载时发生的块类型时,块类型数据(标题、默认属性/值等)通过块类型保存(在内存中)data source (命名空间core/blocks
), 只要页面打开,客户机就可以使用这些数据,因此,尽管默认属性值不在JSON数据中(JSON数据是持久的,并且是保存在数据库中的帖子内容的一部分),但这些值可以在客户机上使用。
因此,Gutenberg(或块编辑器)不将默认属性值保存到JSON数据(在block\'s comment delimiter), 因为块编辑器始终可以从块类型数据源中的块类型数据中读取值。例如,通过浏览器控制台,您可以尝试以下操作:
// Inspect the attributes for the core Image block TYPE.
wp.data.select( \'core/blocks\' ).getBlockType( \'core/image\' ).attributes
您会看到返回的数据总是相同的(例如。
linkDestination
在上面的示例中,其默认设置为
none
) 并且始终可以通过以下方式访问整个页面
wp.data
(
see @wordpress/data).
因此,当默认值没有出现在JSON数据中时,不要担心,您还应该知道,如果您输入的值与默认值相同,那么它将不会保存到JSON数据中。一、 e.此处仅应保存自定义值。
// Let\'s assume your block type\'s name is my-plugin/foo-block, with the attribute
// named infoButtonText which defaults to \'I am default\'.
setAttributes( { infoButtonText: \'I am NOT default\' } ); // using custom value
// Result: <!-- wp:my-plugin/foo-block {"infoButtonText":"I am NOT default"} /-->
setAttributes( { infoButtonText: \'I am default\' } ); // using default value
// Result: <!-- wp:my-plugin/foo-block /-->
// I.e. The infoButtonText is no longer in the JSON data.
// But attributes.infoButtonText would actually return \'I am default\' - the default value.