gpt4 book ai didi

javascript - 在古腾堡自定义横幅 block 中使用页面标题

转载 作者:数据小太阳 更新时间:2023-10-29 05:17:22 26 4
gpt4 key购买 nike

我为古腾堡创建了一个自定义横幅图像 block ,效果很好,但是我想知道是否可以使用页面标题作为当前横幅文本占位符,直到它被编辑?

enter image description here

我的编辑功能是

 return [
el('div', {className:'header-banner'},
el(
element.Fragment,
null,
controls,
el( "div",{
className: 'banner-image',
style: { backgroundImage: 'url('+attributes.mediaURL+')' }
},
attributes.title || isSelected ? el(RichText, {
key: 'editable',
tagName: "h1",
className: "banner-title",
//Can i add the page title in here if it is avaiable??
//placeholder: i18n.__('Write title…'),
value: attributes.title,
onChange: function onChange(value) {
return props.setAttributes({ title: value });
},
inlineToolbar: true
}) : null

)
)
)//header-banner
];

谢谢:)

最佳答案

Gutenberg 使用 wp.data 存储当前编辑器状态,这是对 Redux 的抽象。要获得标题(或 100+ other values ),我们需要查询 core/editor数据存储。 Gutenberg 使用 getEditedPostAttribute 使检索帖子属性变得简单.

一旦我们知道要查找的位置,获取标题就很简单了:

const { select } = wp.data;
const title = select("core/editor").getEditedPostAttribute( 'title' );

这行得通,但没有响应。当帖子标题更改时,title不会反射(reflect)新的值(value)。这有点让人失望。

为了反射(reflect)编辑器标题的变化,我们需要监听 core/editor 的变化。数据存储。有几种方法可以做到这一点。

一个解决方案是定义一个简单的更改处理程序函数并将其订阅到数据存储更新:

const { select } = wp.data;

function logTitle() {
const title = select("core/editor").getEditedPostAttribute( 'title' );
console.log("Editor Title:", title);
}
subscribe(logTitle);

任何 wp.data 时会触发存储值已更新——这种情况经常发生。

古腾堡认可的包含数据存储值的方法似乎是使用高阶组件直接包含值:

const GetTitle = props => <div>{props.title}</div>;

const selectTitle = withSelect(select => ({
title: select("core/editor").getEditedPostAttribute( 'title' )
}));
const PostTitle = selectTitle(GetTitle);

然后在 block 的输出中,包含一个 <PostTitle /> jsx 标签。这比嵌套回调或其他更改处理程序要干净得多。

高阶组件可能难以遵循。简短的解释是,它们包装一个现有的组件,生成一些数据,然后返回一个组件的副本,并将新数据作为 props 传递。这将逻辑与表示分离并有助于可维护性。

GetTitle很简单,它只是一个接受 props 的小组件带有标题键的对象并吐出一些 html。

withSelect是函数构造函数或装饰器。它接受一个函数参数,并返回一个需要组件的新函数。通常会立即调用返回的函数(类似于 IIFE ),但我将其存储在 selectTitle 中为清楚起见变量。新函数生成一个包含标题的对象,该对象将作为 Prop 传递给传递给 withSelect 的任何组件。 .通过某种魔法,只要数据存储更新,就会调用它。

最后,PostTitle包含 selectTitle 的函数结果这是一个预先填充了生成的 Prop 的组件。然后可以使用 <PostTitle /> 将该组件放入我们的标记中标签。每当更新编辑器数据存储时,更高级别的组件将反射(reflect)新数据。

关于javascript - 在古腾堡自定义横幅 block 中使用页面标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51674293/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com