React 地图 - 如果缺少,不要 return 项目

React map - don't return item if missing

我在 React 中使用地图来显示 facebook post 的提要,但如果 [=17] 中缺少消息字段,我不希望 post 呈现=] 数据。

如果我这样做,我会得到一个错误('if' 是一个意外的标记)并且我的项目将无法构建

return (
        <Slider
          {...Settings}>
          {postsAvailable && posts.map((post, index) => (
            if (!post.message) return null
            return (<div key={post.id}>
              { index === 0 && <Item /> }
              { index > 0 && <div className='item'>
                <img data-original={post.full_picture} className='img-responsive' />
                <div className={`facebook-content slide-${post.id}`}>
                  <p className='text'>{post.message}</p>
                </div>
              </div> }
            </div>)
          ))}
        </Slider>
      )

您没有将 map 赋予的功能赋予 body。将 () 更改为 {},它将按预期工作。

return (
  <Slider {...Settings}>
    {postsAvailable &&
      posts.map((post, index) => {
        if (!post.message) return null;
        return (
          <div key={post.id}>
            {index === 0 && <Item />}
            {index > 0 && (
              <div className="item">
                <img
                  data-original={post.full_picture}
                  className="img-responsive"
                />
                <div className={`facebook-content slide-${post.id}`}>
                  <p className="text">{post.message}</p>
                </div>
              </div>
            )}
          </div>
        );
      })}
  </Slider>
);

或者,您可以先 filter 删除所有没有留言的帖子,然后 map 删除有留言的帖子。

return (
  <Slider {...Settings}>
    {postsAvailable &&
      posts
        .filter(post => post.message)
        .map((post, index) => (
          <div key={post.id}>
            {index === 0 && <Item />}
            {index > 0 && (
              <div className="item">
                <img
                  data-original={post.full_picture}
                  className="img-responsive"
                />
                <div className={`facebook-content slide-${post.id}`}>
                  <p className="text">{post.message}</p>
                </div>
              </div>
            )}
          </div>
        ))}
  </Slider>
);

你可以先用filter:

posts.filter((post) => post.message).map((post, index) => (...

尽管如此,如果可能,您应该在获取帖子时进行过滤,而不是在呈现函数中进行过滤。尽可能少地在渲染函数中执行操作 - 以获得良好的概览和性能。