古登堡缺省值未保存在json中

时间:2020-10-08 作者:Marcust97

当我在gutenberg块的属性中设置默认值时,这些值可以在客户端上使用,但在我使用setAttributes更改属性之前,它不会出现在JSON数据中。

示例:

attributes: {
            infoButtonText: { type: \'string\', default: \'I am default\' },
        },
编辑功能开始于:

function Edit( props ) {
    const { attributes, setAttributes } = props;
    ....
由于我们有一个headless设置,save函数只会返回null.

如果我console.log(attributes.infoButtonText) 它将显示“我是默认值”,但不触摸它并点击保存按钮,它只是null 在JSON中。

我不明白什么?

谢谢

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

当我在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.

相关推荐