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

React Native中FontAwesomeIcon在TouchableHighlight/Pressable内无法工作

解决FontAwesomeIcon在TouchableHighlight/Pressable内部报错的问题

问题重现

将FontAwesomeIcon直接放在TouchableHighlight内部时触发错误:

ERROR  TypeError: Cannot read property 'color' of undefined
This error is located at:
    in FontAwesomeIcon (created by Page)
    in RCTView (created by View)
    in View (created by TouchableHighlight)
    in TouchableHighlight (created by TouchableHighlight)
    in TouchableHighlight (created by Page)
...

对应代码:

<TouchableHighlight onPress={someOnPressMethod}>
    <FontAwesomeIcon icon={faPlus} color='white'/>
</TouchableHighlight>

图标放在组件外部可正常显示。

解决方案

1. 给图标套一层View隔离props传递

TouchableHighlight会向直接子组件传递额外的内部props,干扰FontAwesomeIcon的属性解析,套View可隔离这些传递:

<TouchableHighlight onPress={someOnPressMethod}>
  <View>
    <FontAwesomeIcon icon={faPlus} color='white' />
  </View>
</TouchableHighlight>

2. 使用Pressable的函数式子元素

Pressable支持以函数作为子元素,能避免不必要的props传递,还可直接处理按压状态:

<Pressable onPress={someOnPressMethod}>
  {({ pressed }) => (
    <FontAwesomeIcon 
      icon={faPlus} 
      color='white' 
      style={{ opacity: pressed ? 0.7 : 1 }} 
    />
  )}
</Pressable>

3. 检查导入和版本兼容性

确保图标和库的导入路径正确:

import { FontAwesomeIcon } from '@fortawesome/react-native-fontawesome';
import { faPlus } from '@fortawesome/free-solid-svg-icons';

若版本不兼容,尝试升级到@fortawesome/react-native-fontawesome的稳定版本,或降级匹配项目依赖。

原因说明

TouchableHighlight的内部实现会将自身的部分props(如容器样式相关属性)传递给直接子组件,而FontAwesomeIcon组件未处理这些额外props,导致内部解析color属性时出现undefined的情况,通过View隔离或使用Pressable的函数子元素可规避该问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 17:37:05