Gutenberg:加载块时出错:参数无效:属性,但可以在代码中使用

时间:2021-01-06 作者:Marc

我设法在插件中获得了一个可用的属性。嗯,算是吧。我可以读写属性道具。属性。所容纳之物但我从古腾堡区块本身得到了信息:

加载块时出错:无效参数:属性

在网络检查器中,我看到一个400:

数据:{状态:400,参数:{属性:““内容不是对象的有效属性。”参数:{属性:““内容”不是对象的有效属性。”

enter image description here

以下是相关代码:

registerBlockType(\'simpletoc/toc\', {
  title: __(\'SimpleTOC\', \'simpletoc\'),
  icon: simpletocicon,
  category: \'layout\',
  attributes: {
        content: {
            type: \'string\',
      source: \'text\',
      selector: \'div\',
        },
    },
  edit: function(props) {
    props.setAttributes( { content: "newContent" } );
    
    console.info(props.attributes.content);

    const mycontent = props.attributes.content;

    return (
    <div>
    <InspectorControls>
      <ToggleControl
          label={mycontent}
      />
    </InspectorControls>
    <BlockControls>
      <ToolbarGroup>
        <ToolbarButton
          className="components-icon-button components-toolbar__control"
          label={__(\'Update table of contents\', \'simpletoc\')}
          onClick={function() {
            sendfakeAttribute(props)
          }}
          icon="update"
        />
      </ToolbarGroup>
  </BlockControls>
  <p className={props.className}>
    <ServerSideRender block={props.name} attributes={props.attributes} />
  </p>
  </div>
    )
  },
  save: props => {
    return null;
  },
});
但我可以用

props.setAttributes( { content: "newContent" } );
带控制台。信息和我的ToggleControl我实际上可以读取值!发生了什么事?

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

问题中的错误可能是因为当您运行register_block_type(), 您没有设置块属性,或者它(在PHP中是一个数组)没有名为content.

因此,请确保在两个JavaScript中都定义了属性(通过registerBlockType()) 和PHP(通过上述函数),并且该模式是有效的。例如。

JS中:

registerBlockType( \'simpletoc/toc\', {
    attributes: {
        content: {
            type: \'string\',
            // other args
        },
        // other attributes
    },
    // ...
} );

register_block_type( \'simpletoc/toc\', array(
    \'attributes\' => array(
        \'content\' => array(
            \'type\' => \'string\',
            // other args
        ),
        // other attributes
    ),
    // ...
) );