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

React Native中finally调用setState致网络指示器不显示的问题

为什么React Native中finally里的setState没让网络指示器显示?

这问题我之前也踩过一模一样的坑!核心原因根本不是React Native版本或者Android系统的问题,是你对Promise的finally用法理解错了。

咱们拆解下你的代码问题:

  • 你写的是.finally(this.setState({networkActivity: false}))——这里你直接执行了setState,而不是把它包装成一个函数传给finally。这就导致在fetch还没开始发起请求的时候,这条setState就已经跑了,把networkActivity立刻设为false,指示器刚要显示就被关掉,自然看不到任何效果。
  • 而你在then/catch里应该是写成了.then(() => { this.setState(...) })这种函数形式,所以是等请求真正结束后才执行setState,这时候指示器就能正常显示了。

再结合你用的React Native 0.51版本,这个版本里的Promise finally实现对参数的要求很严格,必须传递一个回调函数,不然就会立刻执行你写的表达式,不会等Promise完成状态变更。

正确的写法应该是这样:

this.setState({networkActivity: true});
fetch(...)
  .then(response => {
    // 处理你的响应逻辑
  })
  .catch(error => {
    // 处理你的错误逻辑
  })
  .finally(() => {
    this.setState({networkActivity: false});
  });

把setState放在一个箭头函数里传给finally,这样只有当fetch的Promise完成(不管成功还是失败)时,才会执行这个箭头函数里的setState,指示器就能在请求期间正常显示了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:15:48