如何修复 React 中的“列表中的每个子项都应该有一个唯一的'key' prop”警告?

How can I fix the 'Each child in a list should have a unique 'key' prop' warning in React?

提问人:Binayak Purohit 提问时间:5/26/2023 更新时间:5/26/2023 访问量:283

问:

我正在开发一个 react 应用程序,我无法修复此警告,请您帮助找到我需要密钥的具体位置

我的代码块,其中产生了错误-

const [experiences, setExperiences] = useState([]);
useEffect(() => {
    const query = '*[_type == "experiences"]';
    const skillsQuery = '*[_type == "skills"]';

    client.fetch(query).then((data) => {
      setExperiences(data);
    });

    client.fetch(skillsQuery).then((data) => {
      setSkills(data);
    });
  }, []);


<div className="app__skills-exp">
          {experiences.map((experience) => (
            <motion.div
              className="app__skills-exp-item"
              key={experience.year}
            >
              <div className="app__skills-exp-year">
                <p className="bold-text">{experience.year}</p>
              </div>
              <motion.div className="app__skills-exp-works" key={experience.works}>
                {experience.works.map((work) => (
                  <>
                    <motion.div
                      whileInView={{ opacity: [0, 1] }}
                      transition={{ duration: 0.5 }}
                      className="app__skills-exp-work"
                      data-tip
                      // data-for is depricated as v4 using data-tooltip-id instead
                      data-tooltip-id={work.name}
                      key={work.name}
                    >
                      <h4 className="bold-text">{work.name}</h4>
                      <p className="p-text">{work.company}</p>
                      
                    </motion.div>
                    <Tooltip
                      id={work.name}
                      effect="solid"
                      arrowColor="#fff"
                      className="skills-tooltip"
                    >
                      {work.desc}
                    </Tooltip>
                  </>
                ))}
              </motion.div>
            </motion.div>
          ))}
        </div>

我尝试在工具提示中使用键,但没有用

ReactJS 关键 警告

评论


答:

0赞 Florent M. 5/26/2023 #1

列表的每个元素都应该有一个关键属性。

所以当你这样做时:

{experience.works.map((work) => (
  <>
    <motion.div
      whileInView={{ opacity: [0, 1] }}
      transition={{ duration: 0.5 }}
      className="app__skills-exp-work"
    // ...
  </>
))}

你使用的组件叫做 a ,是编写它的快捷方式,它不能包含以这种方式编写的 prop。Fragment<></>key

使用快捷方式而不是全名是很常见的,但在这种特定情况下,您应该这样写:

{experience.works.map((work) => (
  <Fragment key={work.name}>
    <motion.div
      whileInView={{ opacity: [0, 1] }}
      transition={{ duration: 0.5 }}
      className="app__skills-exp-work"
     // ...
  </Fragment>
))}

评论

0赞 Binayak Purohit 5/27/2023
非常感谢Florent M。这修复了它。我应该更好地阅读文档。干杯