【问题标题】:Discard handling a network request when a component unmounts卸载组件时放弃处理网络请求
【发布时间】:2019-07-30 09:15:39
【问题描述】:

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

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

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

我的问题是,当卸载组件时,无论如何都会在请求完成时处理获取回调。第一种情况,这不是问题:商店更新成功,大家都很开心。

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

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

我在这里有哪些可能的解决方案?最简单的方法是在每个组件中使用_isMounted 属性和在每个获取错误处理程序中,如果_isMounted == false 则不要执行任何操作。然而,这种方法是冗长的并且是一种反模式。

我还有其他选择吗?

【问题讨论】:

  • 获取请求在哪里执行?是在组件中还是在 redux 操作中?
  • 获取请求在不同的文件中执行,但它们作为 Promise 暴露给组件以便以图形方式处理结果

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2011-07-11
    • 1970-01-01
    • 2012-11-17
    • 1970-01-01
    • 1970-01-01
    • 2018-08-21
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    相关资源
    最近更新 更多