【问题标题】:Where is the missing key for my child comp?我的孩子补偿缺少的钥匙在哪里?
【发布时间】:2021-06-18 09:34:24
【问题描述】:

我遇到了“列表中的每个孩子都应该有一个唯一的 key prop”错误。我已经阅读了文档并输入了密钥,但没有运气。不知道我误会了什么!

blogPosts 是从上下文中导入的。 被称为键的 id 是唯一的(POSTID1、POSTID2、...等)。 为了更好的可读性,去掉了一些类名。

const topicPosts = blogPosts.filter((post)=>post.topic.toLowerCase()===topic);
const handleLoadMore = () => {
  const newIndex = articleIndex + 5 > topicPosts.length ? topicPosts.length : articleIndex + 5;
  setArticleIndex(newIndex);
}
return (
  <section onClick={handleOutsideClick}>
    <div>
      <section>
        <h1>{topic}</h1>
        {
          topicsData.map((topicData)=> topicData.name.toLowerCase()===topic && <p key={topicData.id}>{topicData.intro}</p>)
        }
      </section>
      <div>
        <section>
          <div>
            {
              topicPosts.slice(0,3).map((post)=>{
                const { id } = post;
                return (
                  <TopicPagePost key={id} {...post}/>
                )
              })
            }
          </div>
          <div className={topicPosts.length>3 ? `subpage-articles` : `display-none`}>
            {
              topicPosts.slice(3,articleIndex).map((post, index)=>{
                const { id } = post;
                return (
                  <>
                    <TopicPagePost key={id} {...post}/>
                    {
                      index%4===0 && <div key={index} className="subpage-main-ad">
                        Ad placement here
                      </div>
                    }
                  </>
                )
              })
            }
          </div>
          <button type="button" onClick={handleLoadMore}>Load more articles</button>
        </section>
        <aside>
          <SubscribeBlock/>
          <div>
            Ad placement here
          </div>
        </aside>
      </div>
    </div>
  </section>
)

【问题讨论】:

标签: reactjs react-hooks


【解决方案1】:

这是因为您需要将key 添加到从map 返回的第一个元素,在本例中为&lt;&gt;

为此,您需要将&lt;&gt; 替换为&lt;Fragment&gt;,这样您就可以直接向其添加密钥:

import React, { Fragment } from "react"
{topicPosts.slice(3,articleIndex).map((post, index) => {
  const { id } = post;
    
  return (
    <Fragment key={id}>
      <TopicPagePost {...post}/>

      {index%4===0 && (
        <div className="subpage-main-ad">
          Ad placement here
        </div>
      )}
    </Fragment>
  )
})}

【讨论】:

  • 这样一个简单的解决方案。谢谢!!
猜你喜欢
  • 2021-06-09
  • 2020-01-22
  • 2018-05-02
  • 1970-01-01
  • 2019-06-05
  • 2016-07-06
  • 2020-12-17
  • 2018-07-13
  • 1970-01-01
相关资源
最近更新 更多