【问题标题】:State does not unmount when changing screens and opens randomly ( react-navigation - firebase - react native-maps - giftedcha )更改屏幕并随机打开时状态不会卸载( react-navigation - firebase - react native-maps - giftedcha )
【发布时间】:2019-12-19 12:27:10
【问题描述】:

在屏幕之间导航时不会重置屏幕状态。

屏幕 A:地图(主屏幕)屏幕 B:地图过滤器

当用户登录时,他会看到主屏幕 - 屏幕 A - 与 firebase 实时数据库中的用户一起在 componentdidmount setState 上。为了过滤地图,他进入屏幕 B 设置过滤器,过滤器被保存到 firebase。保存过滤器后,他返回屏幕 A,但初始状态的用户是相同的,要查看过滤列表,用户需要重新启动应用程序。

当用户发送消息时,与天才聊天库和 Firebase 有同样的问题,聊天屏幕会在其他用户的应用程序上随机打开并重新打开,即使用户没有聊天。

尝试在这两种情况下将 isMonted = true 放在 componentdidmount 上,并在离开屏幕时将其设置为 false,但没有成功。

尝试将屏幕将所有初始状态设置为 false 时设置状态,也没有运气。

所有屏幕都在同一个导航堆栈上。

使用:-expo -firebase -react native navigation -react native maps -giftedchat

当用户离开屏幕并防止屏幕随机打开时,有什么方法可以卸载状态?

已尝试:Which lifecycle event is called when a screen appears? 但数据保持不变

【问题讨论】:

  • 当你返回时试试 this.props.navigation.push 而不是 this.props.navigation.navigate
  • push 方法用于更新状态,但现在屏幕 A 上的标记导致一些闪烁
  • 嗯,不知道,因为没有代码,但我想你得到了你想要的东西

标签: android firebase react-native react-navigation react-native-gifted-chat


【解决方案1】:

来自文档:

重置操作会擦除整个导航状态并将其替换为 几个动作的结果。

import { StackActions, NavigationActions } from 'react-navigation';

const resetAction = StackActions.reset({
  index: 0,
  actions: [NavigationActions.navigate({ routeName: 'Screen B' })],
});
this.props.navigation.dispatch(resetAction);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-12
    • 2019-03-10
    • 2023-03-17
    • 2018-09-08
    相关资源
    最近更新 更多