我有一个自定义块,显示为当前帖子指定的分类术语。我试图在后台加载这些术语时显示加载微调器。
假设我有一个自定义分类的选择器,看起来像这样:
const { withSelect } = wp.data;
const MyComponent = withSelect(select => {
return {
terms: select(\'core\').getEntityRecords("taxonomy", "my_taxonomy", {
_fields: \'id,name,slug\'
}),
}
})(props => {
console.log("taxonomies: ", props.terms);
return (
<ul>
{props.terms.map(t => (
<li key={term.id}>{term.name}</li>
))}
</ul>
);
});
当编辑器加载并通过一些AJAX获取分类术语时,调用
props.terms
在此期间,值更改为以下值
首字母:道具。条款=[]
请求触发后的某个时刻:道具。条款=null
返回数据时:道具。条款=[term1, term2, ...]
我想无论什么时候props.terms === null
我可以假设这些术语正在加载,但我更喜欢从存储区加载某种状态。这可能吗?
最合适的回答,由SO网友:Sally CJ 整理而成
是的,这是可能的,你会使用wp.data.select( \'core/data\' ).isResolving()
.
基于代码的示例:
const MyComponent = withSelect(select => {
const { isResolving } = select( \'core/data\' );
const query = { _fields: \'id,name,slug\' };
return {
terms: select(\'core\').getEntityRecords("taxonomy", "my_taxonomy", query),
isRequesting: isResolving( \'core\', \'getEntityRecords\', [ \'taxonomy\', \'my_taxonomy\', query ] )
};
})(props => {
if ( props.isRequesting ) {
return (
<div className="loading">
Loading...
</div>
);
}
return (
<ul>
{ props.terms.map( term => (<li key={ term.id }>{ term.name }</li>) ) }
</ul>
);
});
你也可以检查一下
the "edit" component 对于“类别”块。