typescript 在每个Map上重新装载组件/重置useState

vof42yt1  于 2023-03-31  发布在  TypeScript
关注(0)|答案(1)|浏览(123)

也许我想得太复杂了,但我就是不能让它工作。
我将从API中获取的盒子Map到我的Box组件:

{boxes.max((box) => (
          <div className="box" key={box.id}>
            <BoxCard
              box={box}
              image={box.image ? box.image.id : undefined}
            />
          </div>
))}

在我的BoxCard中,我正在获取图像:

const [imageData, setImageData] = useState<string>();

  if (imageId) {
    useFetchItem<typeof Image>("/image/", imageId, {
      onSuccess: (data) => {
        setImageData(data);
      },
    });
  }

然后用src={imageData}插入。
对于第一个有图像的盒子,一切正常,但在那之后,所有有图像的盒子都被分配了来自第一个有图像的盒子的图像。
有没有办法在任何Map迭代中重置useState的状态?或者其他方法?

fykwrbwg

fykwrbwg1#

我认为添加一个key就可以解决这个问题。当React重新渲染组件列表时,它使用key prop来确定一个组件是否需要更新,或者是否可以从以前的渲染中重用它。如果你没有指定一个唯一的key,React可能会认为两个组件是相同的,并重用以前组件的状态。

{boxes.max((box, index) => (
  <div className="box" key={index}>
    <BoxCard
      box={box}
      image={box.image ? box.image.id : undefined}
      key={index} // add a unique key prop
    />
  </div>
))}

相关问题