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

FlatList本地图片无法渲染问题排查求助

解决React Native FlatList本地图片不显示的问题

嘿,我刚看完你的问题,这是React Native里加载本地资源时很容易踩的一个小坑!

问题根源

你现在用source={{uri: item.logo}}的方式加载本地图片是不对的——React Native中,项目内的本地静态资源(比如你放在项目文件夹里的图片)必须通过require()方法引入,而uri参数是用来加载网络图片或者设备本地文件系统里的图片的。RN在打包阶段会对require()引入的资源做索引和处理,直接用uri的话它找不到这些本地图片。

修复步骤

把Image组件的source属性修改为require('./' + item.logo),注意这里的./要根据你的图片实际存放路径调整:

  • 如果图片和当前HomeScreen组件文件在同一目录,用./就可以;
  • 如果图片放在assets/images这样的子目录,就要写成require('./assets/images/' + item.logo)。

修改后的完整代码

export default class HomeScreen extends React.Component { 
  constructor(props) { 
    super(props); 
    this.state = { 
      searchText: '', 
    }; 
  } 

  render() { 
    // Data can be coming from props or any other source as well 
    const data = [ 
      { key: 'Athlean-X', logo: 'athlean_x.png' }, 
      { key: 'Panelaria Ricardo Faria', logo: "euro2020.png" }, 
      { key: 'tEsLa', logo: "jamor.png" }, 
      { key: 'Lols Inc.', logo: "rock_in_rio.png" }, 
      { key: 'Vale de Silicone', logo: 'splash.png' }, 
      { key: 'Empresa do Helder', logo: "edp_cooljazz.png" }, 
      { key: 'BD Swiss', logo: "superbock_superrock.png" } 
    ]; 

    const filteredData = this.state.searchText ? 
      data.filter(x => x.key.toLowerCase().includes(this.state.searchText.toLowerCase()) ) 
      : data; 

    return ( 
      <View style={styles.container}> 
        <View style={styles.flatlist}> 
          <FlatList 
            data={filteredData} 
            renderItem={({ item }) => ( 
              <View style={{flexDirection:'row'}}> 
                {/* 核心修改就在这里 */}
                <Image 
                  style={{width:50, height:50, alignSelf: 'center', borderRadius:300}} 
                  source={require('./' + item.logo)} 
                /> 
                <Text style={styles.item}>{item.key}</Text> 
              </View> 
            )} 
          /> 
        </View> 
      </View> 
    ); 
  } 
}

额外注意事项

  • 确认图片文件名和data数组里的logo字段完全一致,RN对文件名的大小写是敏感的;
  • 如果你的图片放在自定义的资源目录(比如assets),记得检查metro.config.js里是否配置了该目录的资源解析规则,避免打包时遗漏资源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 17:32:29