【问题标题】:WP API in React Js (Gutenberg Editor) : Cannot read property 'wp:featuredmedia' of undefined even with conditionReact Js(古腾堡编辑器)中的 WP API:即使有条件也无法读取未定义的属性“wp:featuredmedia”
【发布时间】:2020-02-14 10:30:12
【问题描述】:

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

并通过 _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>
}

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

【问题讨论】:

    标签: reactjs wordpress wordpress-rest-api wordpress-gutenberg gutenberg-blocks


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      发布 && 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._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>
          )}
      

      【讨论】:

      • 请不要添加“谢谢”作为答案。相反,请投票给您认为有帮助的答案。 - From Review
      • 请再看看....我的代码有点不同'它基于答案中的代码,这就是我发布代码的原因。我的:post && post._embedded && post._embedded['wp:featuredmedia']&& 原文:post && post._embedded && post._embedded['wp:featuredmedia']
      猜你喜欢
      • 2019-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-04
      • 2021-10-08
      • 1970-01-01
      • 2018-06-20
      • 2019-06-26
      相关资源
      最近更新 更多