我设法在插件中获得了一个可用的属性。嗯,算是吧。我可以读写属性道具。属性。所容纳之物但我从古腾堡区块本身得到了信息:
加载块时出错:无效参数:属性
在网络检查器中,我看到一个400:
数据:{状态:400,参数:{属性:““内容不是对象的有效属性。”参数:{属性:““内容”不是对象的有效属性。”
以下是相关代码:
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我实际上可以读取值!发生了什么事?
最合适的回答,由SO网友:Sally CJ 整理而成
问题中的错误可能是因为当您运行register_block_type()
, 您没有设置块属性,或者它(在PHP中是一个数组)没有名为content
.
因此,请确保在两个JavaScript中都定义了属性(通过registerBlockType()
) 和PHP(通过上述函数),并且该模式是有效的。例如。
JS中:
registerBlockType( \'simpletoc/toc\', {
attributes: {
content: {
type: \'string\',
// other args
},
// other attributes
},
// ...
} );
在PHP中:
register_block_type( \'simpletoc/toc\', array(
\'attributes\' => array(
\'content\' => array(
\'type\' => \'string\',
// other args
),
// other attributes
),
// ...
) );