这是一个与react相关的问题,所以我建议您看看Components and Props.
在这种情况下,edit函数传递一个参数,该参数是一个对象,我们可以调用props:
registerBlockType("my-plugin/my-block", {
//...
edit: props => {
return <MyComponent {...props} />;
}
});
这种传播方式与:
<MyComponent attributes={props.attributes} setAttributes={props.setAttributes} />
具有道具对象的所有属性。
然后,在组件内部,您可以像在问题中所做的那样访问属性:
class MyComponent extends Component {
render() {
const { attributes, setAttributes } = this.props;
const { title, url, image, content } = attributes;
//...etc
注:
在使用了块和过滤器之后,我得出了一个结论,即最好将编辑和保存函数的根元素保留为html元素,而不是组件(然后在其中添加组件)。这是因为Gutenberg通过过滤器更改了这个根元素(例如,它添加了必要的类作为块名,并允许过滤器向其传递属性),如果您使用自己的组件,则必须自己完成这项操作。您可以检查columns block 查看编辑和保存功能中的差异。
registerBlockType("my-plugin/my-block", {
//...
edit: props => {
return (
<div className={props.className}>
<MyComponent {...props} />
</div>
);
},
save: props => {
return (
<div>
<MyComponent {...props} />
</div>
);
},
});