【发布时间】:2021-08-18 17:18:36
【问题描述】:
我有一个自定义 Gutenberg 块 (https://pastebin.com/bV2k5Ekc),我在其中显示文本、链接和图像。我想更改它,而不是将图像 URL 保存为容器的背景图像,而是使用 img 标记。不幸的是 - 我无法正确创建弃用 - 我无法在弃用中分配属性参数:
从这里:
const {
attributes: {
mediaURL,
boxTitle,
boxDescription,
linkText,
linkHref,
linkTitle
},
className,
} = props;
let boxClass = 'cta-box';
let contentDescription = '';
if (boxDescription.length) {
boxClass += ' cta-box-description';
contentDescription = (
<p>
{boxDescription}
</p>
)
}
return (
<div className={`cta-block-box ${className}`}>
<a
className="cta-box-link"
href={linkHref}
style={{ backgroundImage: "url(" + mediaURL + ")" }}
rel="noopener noreferrer"
>
<div className={boxClass}>
<h3>
{boxTitle}
</h3>
{contentDescription}
<span className="arrow">{linkText ? linkText : linkTitle}</span>
</div>
</a>
</div>
);
},
对此(我只更改 return 语句中的内容):
return (
<div className={`cta-block-box ${className}`}>
<a
className="cta-box-link"
rel="noopener noreferrer"
>
<img className="cta-box-image" src={linkHref} alt=""/>
<div className={boxClass}>
<h3>
{boxTitle}
</h3>
{contentDescription}
<span className="arrow">{linkText ? linkText : linkTitle}</span>
</div>
</a>
</div>
);
这当然破坏了古腾堡元素。所以我在博客中添加了一个弃用,尽可能遵循官方 Wordpress 文档:
deprecated: [
{
attributes: {...this.attributes},
save: (props) => {
const {
attributes: {
mediaURL,
boxTitle,
boxDescription,
linkText,
linkHref,
linkTitle
},
className,
} = props;
console.log('dep');
console.log(props);
let boxClass = 'cta-box';
let contentDescription = '';
if (boxDescription.length) {
boxClass += ' cta-box-description';
contentDescription = (
<p>
{boxDescription}
</p>
)
}
return (
<div className={`cta-block-box ${className}`}>
<a
className="cta-box-link"
style={{ backgroundImage: "url(" + mediaURL + ")" }}
rel="noopener noreferrer"
>
<div className={boxClass}>
<h3>
{boxTitle}
</h3>
{contentDescription}
<span className="arrow">{linkText ? linkText : linkTitle}</span>
</div>
</a>
</div>
);
},
}
],
在此之后编辑器页面崩溃,并且我在控制台中收到错误消息,该属性未定义(在脚本文件中显示不正确的行)。这是“之后”的脚本内容 (https://pastebin.com/dVdLMx7N)。
react-dom.min.js?ver=16.13.1:125 ReferenceError: attributes is not defined
at save (cta-box2.js?f66a:242)
at Wt (blocks.min.js?ver=9ed25ffa009c799f99a4340915b6dc6a:3)
at Qt (blocks.min.js?ver=9ed25ffa009c799f99a4340915b6dc6a:3)
at block-editor.min.js?ver=4378547cec8f5157a02ead3dfc5c65b2:12
at hooks.min.js?ver=50e23bed88bcb9e6e14023e9961698c1:2
at $r (blocks.min.js?ver=9ed25ffa009c799f99a4340915b6dc6a:3)
at blocks.min.js?ver=9ed25ffa009c799f99a4340915b6dc6a:3
at Ur (blocks.min.js?ver=9ed25ffa009c799f99a4340915b6dc6a:3)
at blocks.min.js?ver=9ed25ffa009c799f99a4340915b6dc6a:3
at Array.reduce (<anonymous>)
任何帮助将不胜感激!我怀疑我遗漏了一些小细节,但到目前为止我还没有找到它。并且无法在网络上找到足够的相关信息。
提前致谢!
【问题讨论】:
-
弃用函数的诀窍是你基本上完全复制你之前在
save函数中拥有的东西。与属性相同。它们需要完全与之前版本的块一样。 -
@Phil,这就是我通常所做的。让我感到困惑的是属性没有传递给弃用,或者我无法在那里初始化它们。我没有更改任何属性 - 我使用相同的值,只是更改它们的解释方式。
标签: wordpress wordpress-gutenberg gutenberg-blocks