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

React native 组件卸载时放弃处理网络请求,react-native,redux,es6-promise,fetch-api,React Native,Redux,Es6 Promise,Fetch Api,免责声明:我知道这个答案已经被问过了,但在我的情况下,我需要一个具体案例的解决方案,而其他问题/答案并没有真正涵盖 在我的react本机应用程序中,我执行许多网络请求,这些请求可能需要很长时间才能完成。每个请求都以两种主要方式处理: 请求已成功完成。全局redux/flux状态将更新,因此嵌套组件也将更新 请求抛出一个错误。网络错误、服务器错误、400错误等等。在这种情况下,必须以屏幕上显示的消息形式或作为警报向用户显示消息 我的问题是,当卸载组件时,当请求完成时,无论如何都会处理获取回调。

免责声明:我知道这个答案已经被问过了,但在我的情况下,我需要一个具体案例的解决方案,而其他问题/答案并没有真正涵盖

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

  • 请求已成功完成。全局redux/flux状态将更新,因此嵌套组件也将更新
  • 请求抛出一个错误。网络错误、服务器错误、
    400
    错误等等。在这种情况下,必须以屏幕上显示的消息形式或作为警报向用户显示消息
我的问题是,当卸载组件时,当请求完成时,无论如何都会处理获取回调。在第一种情况下,这不是问题:商店更新成功,每个人都很高兴

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

  • 警报将显示在另一个屏幕上,这是不正确的,并导致我用于显示错误警报的
    模式组件出现问题
  • 错误消息的出现/消失由组件本地状态控制,该状态无法在未安装的组件上更新,因此会引发错误
我的可能解决方案是什么?最简单的方法是在每个组件中使用
\u isMounted
属性,在每个获取错误处理程序中,如果
\u isMounted==false
,则不要执行任何操作。但是,这种方法冗长且是反模式的


我还有其他选择吗?

如果您使用的是
反应导航
,我相信您可以在操作中扣除状态,而不调用警报


我的建议是,您将导航道具传递给action方法,并在那里扣除导航状态,然后根据需要调用警报。

如果您使用的是
react navigation
,我相信您可以在actions中扣除状态,而不调用警报


我的建议是,将导航道具传递给action方法,并在那里扣除导航状态,然后根据需要调用警报。

在哪里执行提取请求?是在组件中还是在redux操作中?提取请求在不同的文件中执行,但它们作为一种承诺向组件公开,以便以图形方式处理结果。提取请求在哪里执行?是在组件中还是在redux操作中?提取请求在不同的文件中执行,但它们作为一种承诺向组件公开,以便以图形方式处理结果