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

React Native报undefined is not a function near '...icons.map...'错误如何解决

错误解决方案

错误根因

React 组件接收到的第一个参数是整个props对象,你当前的写法直接把参数命名为icons,此时变量icons指向的是完整的props对象,而不是你传递的icons数组。对象本身没有map方法,因此调用icons.map时抛出异常。

修复方案

有两种常用修复方式:

  • 方式1:解构props获取icons字段
    修改组件的参数声明,直接从props中解构出你传入的icons属性:
// 把参数用大括号包裹,解构出icons字段
const BottomTab = ({icons}) => {
  // 其余代码保持不变
}
  • 方式2:通过props对象访问icons属性
    如果不解构,就先把参数命名为props,再通过属性访问拿到数组:
const BottomTab = (props) => {
const [activeTab, setActiveTab] = useState('HOME')

const Icon = ({icon}) => (
    <TouchableOpacity onPress={() => setActiveTab(icon.name)}>
        <Image source={{uri: icon.active}} style={styles.icon} />
    </TouchableOpacity>
)
return (
    <View>
        {/* 从props中取icons数组再调用map */}
        {props.icons.map((icon, index) => (
            <Icon key={index} icon={icon} />
        ))}
    </View>
)
}

额外注意事项

当前代码还有两个潜在问题需要修正:

  1. 初始激活态不匹配:你给activeTab设置的初始值是全大写的'HOME',但图标数组里的name属性是首字母大写的'Home',后续判断激活状态时会匹配失败,建议统一命名规则,比如把初始值改成'Home'。
  2. 未区分激活/未激活图标:当前Icon组件里固定使用icon.active的地址,不管标签是否激活都会展示激活态图标,建议增加判断逻辑:
const Icon = ({icon}) => (
    <TouchableOpacity onPress={() => setActiveTab(icon.name)}>
        <Image 
            source={{uri: activeTab === icon.name ? icon.active : icon.inactive}} 
            style={styles.icon} 
        />
    </TouchableOpacity>
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 15:09:04