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

React人脸检测应用报错Uncaught TypeError: boxes.map is not a function求助

解决Uncaught TypeError: boxes.map is not a function错误

错误原因

map是数组的专属方法,出现这个错误说明你传入的boxes不是数组——它可能是undefined、null,或是一个非数组的对象(比如API返回的单个人脸框对象而非数组)。

解决方案

1. 确保boxes初始值为数组

在父组件中初始化boxes状态时,直接设为空数组,避免传递undefined或null:

// 父组件中的状态初始化
const [boxes, setBoxes] = useState([]);

2. 组件内部添加类型校验兜底

在调用map前先判断boxes是否为数组,避免非数组值触发错误:

{Array.isArray(boxes) && boxes.map((box, i) => {
  return (
    <div
      key={i}
      className='bounding-box'
      style={{ top: box.topRow, right: box.rightCol, bottom: box.bottomRow, left: box.leftCol }}></div>
  );
})}

或者用更简洁的空值合并语法,把非数组值转为空数组:

{(boxes || []).map((box, i) => {
  // 原有渲染逻辑
})}

3. 检查数据来源格式

如果boxes来自API响应,确认接口返回的是数组格式:

  • 若接口在无检测结果时返回null,处理数据时转为空数组:setBoxes(response.data || [])
  • 若接口返回单个人脸框对象,把它包装成数组:setBoxes([response.data])

修改后的完整组件代码

import React from 'react';
import './FaceRecognition.css';

const FaceRecognition = ({ imageUrl, boxes }) => {
  return (
    <div className='center ma'>
      <div className='absolute mt2'>
        <img id='inputimage' alt='' src={imageUrl} width='500px' height='auto' />
        {Array.isArray(boxes) && boxes.map((box, i) => {
          return (
            <div
              key={i}
              className='bounding-box'
              style={{ top: box.topRow, right: box.rightCol, bottom: box.bottomRow, left: box.leftCol }}></div>
          );
        })}
      </div>
    </div>
  );
};

export default FaceRecognition;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 17:25:28