React Js(古腾堡编辑器)中的 WP API:即使有条件也无法读取未定义的 属性 'wp:featuredmedia'

WP API in React Js (Gutenberg Editor) : Cannot read property 'wp:featuredmedia' of undefined even with condition

我在古腾堡编辑器中为最新的自定义帖子构建了一个动态块。

并通过 _embed 为他们获取特色媒体。 所以如果我所有的帖子都有特色图片,它就可以工作,但如果没有,我会在控制台中出错:

TypeError: Cannot read property 'wp:featuredmedia' of undefined

所以我做了条件,但是有同样的错误。 我究竟做错了什么?这是我的代码:

import { Component } from '@wordpress/element';
import { __ } from '@wordpress/i18n';
import { withSelect } from '@wordpress/data';

class PortfolioPostsEdit extends Component {
    render() {
        const { posts, className } = this.props;
        return (
            <>
                {(posts && posts.length > 0) ?
                    <div className={className}>
                        {posts.map(post => (
                            <article key={post.id}>
                                <a href={post.link}>
                                    {post.title.rendered}
                                </a>
                                {post._embedded['wp:featuredmedia'] &&
                                    <div className="image">
                                        <img src={post._embedded['wp:featuredmedia'[0].source_url} />  
                                    </div>
                                }
                            </article>
                        ))}
                    </div>
                : <div>{__("No Posts Found", "my-blocks")}</div>
                }
            </>
        )
    }
}

export default withSelect(
    (select, props) => {
        return {
            posts: select('core').getEntityRecords('postType', 'my_portfolio', 'per_page: 20', '_embed: true')
        }
    }
)(PortfolioPostsEdit);

我不明白为什么我的条件不起作用:

{post._embedded['wp:featuredmedia'] &&
    <div className="image">
        <img src={post._embedded['wp:featuredmedia'[0].source_url} />  
    </div>
}

有人可以帮帮我吗?谢谢。

这意味着 post._embedded 未定义。试试这个:

post && post._embedded && post._embedded['wp:featuredmedia'] // make sure post._embedded is defined

谢谢!!!!对我来说效果很好,我为此困惑了好几天....

这是我用于验证 post 包含特征图像的工作代码,因此如果我们尝试加载没有特征图像集的 post,我不会收到任何错误。

post && post._embedded && post._embedded['wp:featuredmedia']&&

{posts && posts.length > 0 ? (
        <ul className={className}>
            {posts.map(post => (
                <li key={post.id}>
                    <a
                        target="_blank"
                        rel="noopener noreferrer"
                        href={post.link}
                    >
                        {decodeEntities(post.title.rendered)}
                    </a>

                    {

post && post._embedded && post._embedded['wp:featuredmedia']&&

                    <>
                    <img src={post._embedded['wp:featuredmedia'][0].source_url}/>
                    <span>{post._embedded['wp:featuredmedia'][0].title.rendered}</span>
                    </>
                    }


                </li>
            ))}
        </ul>
    ) : (
        <div>
            {" "}
            {posts
                ? __("No Posts Found", "mytheme-blocks")
                : __("Loading...", "mytheme-blocks")}{" "}
        </div>
    )}