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

问题描述 投票:1回答:1

免责声明:我知道这个答案已被提出,但在我的情况下,我需要一个特定案例的解决方案,其他问题/答案并未真正涵盖。

在我的react-native应用程序中,我做了很多网络请求,可能需要很长时间才能完成。每个请求都以两种主要方式处理:

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

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

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

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

这里有什么可能的解决方案?最简单的一个是在每个组件中使用_isMounted属性,并且在每个fetch错误处理程序中,如果_isMounted == false不执行任何操作。但是,这种方法很冗长,也是反模式。

我还有其他选择吗?

react-native redux es6-promise fetch-api
1个回答
0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.