保存时,古登堡块“此块似乎已被外部修改”

时间:2018-06-28 作者:rugbert

刚开始使用Gutenberg block开发,我正在构建一个非常简单的按钮(是的,我知道按钮已经包含在内,但这个块将有许多设置和类未包含在核心块中)。

看起来很简单,但当我保存块并重新加载时,会出现一个验证错误,并显示“此块似乎已被外部修改”消息。

registerBlockType(\'franklin/button\', {
    title: \'Button\',
    keywords: [\'button\' ],
    icon: \'admin-links\',
    category: \'layout\',
    attributes: {
        text: {
            source: \'text\',
            selector: \'.button-text\'
        },
    },

    edit({attributes, setAttributes }) {

        return (
            <div class="guttenberg-usa-button">
                <button class="usa-button">
                    <PlainText
                      onChange={ content => setAttributes({ text: content }) }
                      value={ attributes.text }
                      placeholder="Your button text"
                      className="button-text"
                    /> 
                </button>
            </div>
        );
    },

    save({attributes}) {
        return (
            <button class="usa-button">
                { attributes.text }
            </button>
        );
    } 

});
因此,在编辑器中,我将添加我的块,修改(按钮)文本,保存并重新加载我得到的“此块似乎已被外部修改”消息。

控制台显示以下错误

Expected:

<button class="usa-button" class="wp-block-franklin-button"></button>

Actual:

<button class="usa-button" class="wp-block-franklin-button">testest</button>
我肯定缺少一些基本的概念或东西,但我认为save()函数决定了前端显示的内容,顺便说一句,它看起来和预期的一样。

2 个回复
SO网友:Ashiquzzaman Kiron

出现此错误是因为编辑和保存函数输出不匹配。

 save({attributes}) {
    return (
        <button class="usa-button">
            { attributes.text }
        </button>
    );
} 
准确地说,{ attributes.text } 保存函数未在编辑函数中调用或使用。添加属性。编辑功能中的文本或从保存功能中删除该文本。像这样的东西应该有用-

 <button class="usa-button">
                    <PlainText
                      onChange={ content => setAttributes({ text: content }) }
                      value={ attributes.text }
                      placeholder="Your button text"
                      className="button-text"
                    /> { attributes.text }
                </button>
注意属性。文本也在编辑功能中输出相同的文本,就像保存功能一样。

SO网友:Tom J Nowell

这是因为您的属性使用HTML获取其值,而选择器是.button-text, 但在保存的输出中没有与该选择器匹配的内容。

    save({attributes}) {
        return (
            <button class="usa-button">
                { attributes.text }
            </button>
        );
    } 
请注意button-text 找不到,因此其值为空。这与包含此类的edit组件相矛盾。

更改属性以不使用HTML/文本作为源,或者确保选择器与保存的输出中包含文本的内容相匹配。

结束

相关推荐

在函数中添加JavaScript的正确方法。php

我是WordPress的新手,我开发了一个代码,可以在小部件中单击带有某些样式的按钮后加载iframe。但是它破坏了模板的布局,我想知道如何将我的函数添加到模板中。<a id=\"fazer_pedido\" href=\"https://example.com\" onclick=\"document.getElementById(\'load-chat\'); this.style.cursor = \'default\'; this.style.opacity = \'0.1\