除了呈现服务器端,还有多种更好的方法可以获取古腾堡块中的帖子列表。
首先是在Redux周围使用Wrodpress包装器,并完全按照Gutenberg Handbook:
edit: withSelect( function( select ) {
return {
posts: select( \'core\' ).getEntityRecords( \'postType\', \'post\' )
};
} )( function( props ) {
if ( ! props.posts ) {
return "Loading...";
}
if ( props.posts.length === 0 ) {
return "No posts";
}
var className = props.className;
var post = props.posts[ 0 ];
return el(
\'a\',
{ className: className, href: post.link },
post.title.rendered
);
} ),
请注意编辑函数是如何使用古腾堡存储区的数据组成的,它将posts数组作为一个道具。
第二种选择是简单地使用Axios通过rest API获取所需的帖子:
/**
* Makes a get request to the desired post type and builds the query string based on an object.
*
* @param {string|boolean} restBase - rest base for the query.
* @param {object} args
* @returns {AxiosPromise<any>}
*/
export const getPosts = ({ restBase = false, ...args }) => {
const queryString = Object.keys(args).map(arg => `${arg}=${args[arg]}`).join(\'&\');
return axios.get(`/wp-json/wp/v2/${restBase}? ${queryString}&_embed`);
};
这是本精彩教程的一个片段:
https://github.com/bigbitecreative/gutenberg-postlist-demo定义posts调用后,可以使用componentDidMount调用它,然后将posts设置为新的模态componenet状态:
/**
* When the component mounts it calls this function.
* Fetches posts types, selected posts then makes first call for posts
*/
componentDidMount() {
this.setState({
loading: true,
});
api.getPostTypes()
.then(({ data = {} } = {}) => {
this.setState({
types: data
}
});
}
同样来自Gutenberg Postlist演示,但为了简洁而缩短。