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

React组件传参后find方法无法匹配数据问题求助

问题:传递数组到组件后,通过路由ID筛选数据始终返回undefined

代码情况

App.js 代码

const [data, setData] = useState<CarType[]>([])
<Route exact path="/carDetails/:id">
  <CarDetails data={data} />
</Route>

CarDetails.js 代码

const CarDetails = (data=[]) => {
  const [item, setItem] = useState<CarType>({} as CarType)

  const { id } = useParams<{ id: string }>()
  useEffect(() => {
    const found = data.find((item) => item.id === id)
    if (found) {
      setItem(found)
    }
    console.log(data, 'data', found, 'found')
    
  }, [data, id])
}

问题现象

控制台打印显示data数组存在有效数据,但found始终为undefined,无法匹配到对应id的项。

原因及解决方案

1. 组件参数接收错误

当前CarDetails组件的参数写法错误,React组件的参数是一个props对象,而非直接接收单个prop。正确的接收方式应该解构props中的data:

const CarDetails = ({ data = [] }) => {
  // 其余代码不变
}

如果不解构,data会被赋值为整个props对象,而非传递的数组,自然无法用find方法找到数据。

2. ID类型不匹配

路由参数id默认是字符串类型,而如果data数组中item的id是数字类型,用全等运算符===比较时,类型不同会导致匹配失败。可以将路由参数转为数字后再比较:

const found = data.find((item) => item.id === Number(id))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 19:52:17