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

React Native中API被调用53次且模拟器不显示数据的问题

React Native API调用后控制台多次打印+界面不显示数据的问题解决

问题1:控制台打印API数据53次的原因

  • 你将console.log(response)写在了FlatList的renderItem渲染逻辑里,FlatList会根据data数组的长度渲染对应数量的列表项。如果response数组包含53条数据,renderItem就会执行53次,每次触发一次console.log(response),因此控制台会打印53次。
  • 加上React组件重渲染时renderItem会重新执行,打印次数可能还会增加,核心问题是不该在组件渲染逻辑中放置控制台打印语句。

问题2:数据无法在模拟器界面显示的原因

  • Text组件的内容是{console.log(response)},但console.log()函数的返回值是undefined,导致Text没有可显示的有效内容,界面自然看不到数据。
  • 你没有在Text中渲染列表项item的具体字段,反而错误地放入了打印语句。

修改后的代码

状态与API请求部分(原代码无问题,保留即可)

const [response, setResponse] = useState([]);

useEffect(() => {
  fetch("http://000.000.0.00:2828/blah.svc/example", requestOptions)
  .then(response => response.json())
  .then(result => setResponse(result))
  .catch(error => console.log('error', error))
}, []);

FlatList部分(修正渲染逻辑)

<View style={{flex:0.5}}>
  <FlatList
        data={response}
        renderItem={({ item }) => (
          <View>
            {/* 替换成你需要显示的item具体字段,比如item.name、item.content等 */}
            <Text style={{color:'red'}}>{item.xxx}</Text>
          </View>
        )}
        keyExtractor={(item, index) => index.toString()}/>
</View>
<View style={{flex:0.1}}></View> 

额外注意事项

  • 控制台打印应放在API请求的回调中,避免多次触发:
    .then(result => {
      console.log(result); // 仅在API请求成功时打印一次
      setResponse(result);
    })
    
  • keyExtractor尽量不要使用index,如果数据有唯一标识字段(如item.id),优先使用该字段,避免列表更新时出现渲染异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 17:31:15