You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在useState的prevState回调的map方法内使用if条件语句

问题原因

Array.prototype.map 遍历数组时要求每一项都要有对应的返回值,你写的第一段带if判断的代码,仅在item.id === file.id匹配时返回了新对象,不满足匹配条件的项没有写返回逻辑,会默认返回undefined,最终更新后的imgs数组会出现大量undefined值,自然无法正常运行。
而第二段不带if判断的代码,每一项都隐式返回了构造好的新对象,完全符合map的语法要求,所以可以正常运行。

修正方案

只需要在if判断的分支外,补充不匹配时返回原item的逻辑即可:

uppy.on('complete', (result) => {
  result.successful.forEach((file) =>
    setImgs((prevState) =>
      prevState.map((item) => {
        if(item.id === file.id) {
          return {
            ...item,
            image: file.preview
          }
        }
        // 未匹配到id的项直接返回原对象,避免出现undefined
        return item
      })
    )
  )
})

如果你偏好箭头函数隐式返回的简写形式,也可以用三目运算符实现相同逻辑:

uppy.on('complete', (result) => {
  result.successful.forEach((file) =>
    setImgs((prevState) =>
      prevState.map((item) => 
        item.id === file.id ? {...item, image: file.preview} : item
      )
    )
  )
})

内容的提问来源于stack exchange,提问作者Evgeny Alekseev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 15:12:00