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

Expo React Native未处理Promise拒绝问题求助

解决React Native获取Django数据时的Promise未处理拒绝错误

核心问题:异步请求未处理异常

你的fetchData异步函数没有错误捕获逻辑,当请求失败(比如后端未启动、网络不通、接口返回非JSON格式数据)时,Promise会触发拒绝但未被处理,这就是你看到报错的直接原因。

1. 给异步请求添加错误捕获

修改HomeScreen组件里的fetchData函数,用try/catch包裹请求逻辑,捕获并处理异常:

const fetchData = async()=>{
  try {
    const response =  await fetch('http://127.0.0.1:8000/estate-list/')
    // 先校验请求是否成功(HTTP状态码2xx)
    if (!response.ok) {
      throw new Error(`请求失败:${response.status}`);
    }
    const data = await response.json()
    setData(data)
  } catch (error) {
    console.error('获取数据失败:', error);
    // 可选:给用户显示错误提示
    // Alert.alert('加载失败', '无法获取数据,请检查网络或后端状态');
  }
}

2. 修复请求地址的可达性问题

  • 如果你用模拟器运行Expo,127.0.0.1指向模拟器自身,无法访问电脑上的Django后端,必须替换成你的本机局域网IP(比如http://192.168.3.10:8000/estate-list/)。
  • 确保Django后端已启动,并且配置了跨域允许(可以安装django-cors-headers库并在settings里配置)。

3. 排查其他潜在问题

  • ListItem组件接收了price属性但未在props声明,会引发控制台警告,建议补充:
const ListItem = ({ id, title, description, price }) => {
  const navigation = useNavigation()
  return (
    <TouchableOpacity style={styles.card} 
    onPress={() => navigation.navigate('Detail View',
     { eventId: id, title, description})}>
      
        <Text>{title}</Text>
        <Text>{description}</Text>
        <Text>价格:{price}</Text>
        <Button title='More Info' color={'#0f172a'} />
    </TouchableOpacity>
  );
}
  • 确认Django接口返回的是包含id、title、description、price字段的数组,避免FlatList渲染时出现undefined报错。

完整修改后的HomeScreen代码

const HomeScreen = () => {
  const [data, setData] = useState([])

  useEffect(() =>{
    fetchData()
  }, [])

  const fetchData = async()=>{
    try {
      // 替换为你的本机局域网IP
      const response =  await fetch('http://192.168.x.x:8000/estate-list/')
      if (!response.ok) {
        throw new Error(`HTTP错误:${response.status}`);
      }
      const data = await response.json()
      setData(data)
    } catch (error) {
      console.error('加载数据失败:', error.message);
    }
  }

  return (
    <View style={styles.screen}>
      <HomeList data={data} />
    </View>
  );
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 17:30:20