问题是wp.data.select
触发提取,数据需要一些时间才能可用。在此之前,返回的值是一个空数组。
我的建议是wp.data.useSelect
, 这是一个专门为此制作的React挂钩,因此当数据发生更改时,组件将重新渲染:
const MyComponent = () => {
const categories = useSelect(select =>
select(\'core\').getEntityRecords(\'taxonomy\', \'category\')
);
const [categories_selected, setCategoriesSelected] = useState([]);
return (
<SelectControl
multiple
label={__(\'Cat\')}
options={categories.map(({id, name}) => ({label: name, value: id}))}
onChange={(selected) => {
// I haven\'t tested this code so I\'m not sure what onChange returns.
// But assuming it returns an array of selected values:
setCategoriesSelected(selected)
}}
value={categories_selected}
/>
);
};
这也将有;“发布”;第一次调用
select(\'core\').getEntityRecords(\'taxonomy\', \'category\')
为空。因此,如果
categories.length === 0
.
如果你真的需要防止这种情况发生,我想你可以打电话wp.data.select(\'core\').getEntityRecords(\'taxonomy\', \'category\')
在脚本中,靠近顶部,因此当组件第一次调用它时,数据已经在存储中。