卸载组件时放弃处理网络请求

时间:2019-03-08 10:44:48

标签: react-native redux es6-promise fetch-api

免责声明:我知道已经回答了这个问题,但对于我来说,我需要针对具体情况的解决方案,而其他问题/答案并未真正解决此问题。

在我的本机应用程序中,我执行了许多网络请求,这些请求可能需要很长时间才能完成。每个请求都有两种主要处理方式:

  • 请求已成功完成。全局redux / flux状态已更新,因此嵌套组件也已更新。
  • 请求引发错误。网络错误,服务器错误,400错误等等。在这种情况下,必须以显示在屏幕上或作为警报的消息的形式向用户显示一条消息。

我的问题是,当卸载组件时,无论请求完成还是要处理提取回调。在第一种情况下,这不是问题:商店更新成功,每个人都很高兴。

在第二种情况下,这是一个问题,因为:

  • 警报将显示在不同的屏幕上,这是不正确的,并导致我用来显示错误警报的Modal组件出现问题。
  • 错误消息的出现/消失由组件的LOCAL状态控制,无法在未安装的组件上进行更新,因此会引发错误。

这里有什么可行的解决方案?最琐碎的是在每个组件中使用_isMounted属性,并在每个提取错误处理程序中使用_isMounted == false时不执行任何操作。但是,此方法是冗长且反模式的。

我还有其他选择吗?

1 个答案:

答案 0 :(得分:0)

如果您使用的是react-navigation,我相信您可以在操作中扣除该状态而不必发出警报。

我的建议是,将导航道具传递给操作方法,并在其中扣除导航状态并根据需要调用警报。