typescript 正在从存储呈现子组件

lnlaulya  于 2022-11-18  发布在  TypeScript
关注(0)|答案(1)|浏览(113)

我有一个有子组件的组件,我想用不同的ID呈现这些子组件。它们正在从存储中获取数据。问题是它们被呈现了,但具有相同的项。如何解决这个问题?

多图像组件

const MultiImages: () => JSX.Element = () => {
  const values = ['500', '406', '614'];

  return ( 
      <div>
        {values.map((val, index) => {
          return <OneImage key={index} projectID={val} />;
        })}
      </div>
  );
};

export default MultiImages;

一个映像组件

const OneImage: () => JSX.Element = ({ projectID }) => {
  const projectData = useProjectDataStore();
  const { getProject } = useAction();
  useEffect(() => {
    getProject(projectID ?? '');
  }, []);

  return (
    <>
      <div> 
            <img
              src={projectData.picture}
              }
            />
          <div>
            <a>
              {projectData.projectName}
            </a>
          </div>
      </div>
    </>
  );
};

export default OneImage;
slsn1g29

slsn1g291#

在本例中,组件OneImage将返回return语句中的内容:

<>
  <div> 
    <img
      src={projectData.picture}
    />
    <div>
      <a>
        {projectData.projectName}
      </a>
    </div>
  </div>
</>

元素周围的标签<></>是一个React.片段,没有键。这就是你得到这个错误的原因。因为你已经有一个div标签 Package 了你的元素,你可以这样做:

<div key={parseInt(projectID)}> 
  <img
    src={projectData.picture}
  />
  <div>
    <a>
      {projectData.projectName}
    </a>
  </div>
</div>

您也可以将键更改为Math.floor(Math.random() * 9999)。请注意,传递属性key={index}是不必要的,并且不建议将索引用作React列表中的键。

相关问题