React native React Native:如何在切换回基于状态的选项卡时触发远程提取

React native React Native:如何在切换回基于状态的选项卡时触发远程提取,react-native,react-redux,react-navigation,React Native,React Redux,React Navigation,我正在构建一个包含两个选项卡的应用程序(react导航)。我不熟悉react和redux,我仍在努力思考如何在组件之间进行通信,而不创建太多不必要的依赖关系 选项卡A:主要组件是通过远程API获取数据。为此,我使用了react redux和redux thunk。数据保存在中央存储中,因为它用于不同组件(选项卡A和选项卡B)的按钮状态。按下按钮将调用Thunk,该Thunk处理异步API调用以更新服务器,然后分派操作以更新存储 选项卡B:也通过远程API获取其数据,但通过组件的状态进行设置。我不

我正在构建一个包含两个选项卡的应用程序(
react导航
)。我不熟悉
react
redux
,我仍在努力思考如何在组件之间进行通信,而不创建太多不必要的依赖关系

选项卡A:主要组件是通过远程API获取数据。为此,我使用了
react redux
redux thunk
。数据保存在中央存储中,因为它用于不同组件(选项卡A和选项卡B)的按钮状态。按下按钮将调用Thunk,该Thunk处理异步API调用以更新服务器,然后分派操作以更新存储

选项卡B:也通过远程API获取其数据,但通过组件的
状态进行设置。我不认为把它也放到redux存储中有什么意义,因为它不是跨组件共享的。这里还使用选项卡A中的按钮组件

我试图实现的目标:当redux存储区内的状态发生变化时(按钮的
onPress()
发送操作),选项卡A和选项卡B都需要通过远程API重新获取,但仅在以下情况下:

  • 从一个选项卡切换到另一个选项卡需要在目标选项卡内重新获取。然后,只有在切换回第一个选项卡时,才会触发重新获取
我所考虑的:

tabAinvalidated
tabBinvalidated
标志添加到redux存储。然后,我在两个选项卡中收听
willFocus
事件。然后,如果相应的选项卡被标记为无效,我将重新获取。这可能会起作用,但我不确定在redux存储中保留单个组件的更新标志是否被视为反模式


Q:有没有更好的方法?react native中通知组件需要从远程API重新加载数据的最佳方式是什么?

我想我自己也想出了一个解决方案。现在,我不再为每个选项卡使用布尔标志(
tabAinvalidated
tabBinvalidated
),而是为redux存储中的每个更新记录一个时间戳。对于需要基于redux存储更新重新获取的组件,每次重新获取数据时,我都会将redux时间戳复制到它们自己的组件状态。通过这种方式,我可以检查组件是否需要从服务器重新获取自己的数据

  setFocus = async() => {
    if (this.props.updateTs > this.state.updateTs) {
        await this.loadData()
        this.setState({ updateTs: this.props.updateTs, })
    }
  }
看起来很好用