我制作了我的自定义块按钮。我想把它包起来,水平对齐一个按钮。你怎么能把它包起来?下面的代码有两个问题
不允许编辑按钮中的文本,不允许按钮居中对齐
(function (element, blocks, blockEditor) {
var el = element.createElement;
var RichText = blockEditor.RichText;
blocks.registerBlockType(
\'custome-namespace/button\',
{
title: \'nice button\',
icon: \'button\',
category: \'layout\',
example: {},
attributes: {
text: {
type: \'string\',
default: \'\',
source: \'html\',
selector: \'button\'
},
align: {
type: \'string\',
default: \'center\',
}
},
supports: {
align: true,
justifyContent: true,
alignItems: true
},
edit: function (props) {
var blockProps = blockEditor.useBlockProps();
var buttonBlock = el(
RichText, Object.assign(blockProps, {
onChange: function handleChange(text) {
props.setAttributes({ text: text })
},
value: props.attributes.text,
placeholder: \'Input button label\',
tagName: \'button\',
className: props.className,
})
);
return el(\'div\', blockProps, buttonBlock)
},
save: function (props) {
var blockProps = blockEditor.useBlockProps.save();
var buttonBlock = el(
RichText.Content,
Object.assign(blockProps, {
value: props.attributes.text,
tagName: \'button\',
})
);
return el(\'div\', blockProps, buttonBlock)
},
}
);
})(window.wp.element, window.wp.blocks, window.wp.blockEditor)
非常感谢!
最合适的回答,由SO网友:Sally CJ 整理而成
如果您打开script debugging or the SCRIPT_DEBUG
constant in WordPress, 然后,您会注意到,您的块类型导致React抛出此警告:“quot警告:React无法识别tagName
支持DOM元素“;,因此,在开发块类型时,应该启用脚本调试-至少,您会知道代码会导致警告或错误,即使消息没有意义。。i、 e.它不会告诉你类似的事情;嘿,移除tagName
从您的blockProps
反对"E;.:)
至于问题,或上述警告,是因为block (wrapper) props, i、 e.您的blockProps
变量,包含无效的属性/属性(即tagName
) 对于<div>
标记您的edit()
和save()
函数返回。
该属性将添加到blockProps
当你这样做的时候Object.assign(blockProps, { your props })
它修改了原始blockProps
对象-Object.assign()
工作原理如下array_merge()
在PHP中,但PHP不修改传递给函数的第一个数组,只返回一个新数组;Object.assign()
, 另一方面,修改第一个对象。所以你应该用Object.assign({}, blockProps, { your props })
相反(请注意{}
), i、 e。clone 现有的blockProps
对象,而不是对其进行修改,例如edit()
:
var buttonBlock = el(
// RichText, Object.assign(blockProps, { // bad
// and it\'s bad because it adds the tagName property to the blockProps.
RichText, Object.assign({}, blockProps, { // good
... your props.
})
);
return el(\'div\', blockProps, buttonBlock)
然而,尽管使用
blockProps
(或
useBlockProps
) 在其他元素上不会导致任何错误/警告,我认为上面不需要它,因此我会使用
blockProps
仅在
div
要素:)