React Native 组件在第一次安装后不会触发 componentDidMount()

React Native component is not triggering componentDidMount() after first mount

我有两个 React Native 组件,一个是配置文件(显示记录的用户详细信息),另一个用于登录。

在登录组件中,我将用户详细信息设置为 AsyncStorage

import {AsyncStorage} from 'react-native';

正在将用户添加到 AsyncStorage:

const user = {
   fname:"Tenusha",
   lname:"Guruge"
}
AsyncStorage.setItem("user",JSON.stringify(user))

在配置文件组件中,我阅读了 AsyncStorage

componentDidMount() {
   AsyncStorage.getItem("user").then(user => {
      console.log(user)
      this.setState({user})
   })
}

注销时我清除 AsyncStorage:

AsyncStorage.removeItem("user")

问题是一旦我登录并将用户详细信息设置为 AsyncStorage,它就会存储数据,我可以在配置文件组件中查看它们。用户注销后,存储中的数据将被清除,但是当我导航到配置文件组件时,之前加载的数据仍然存在。

每次用户导航到配置文件组件时,我都需要一种方法来读取当前 AsyncStorage 数据。

  1. 在此处跟踪导航更改并清除状态
  2. 考虑 state-manager 像 redux 那样是最干净的方法

您的问题是在使用 DrawerNavigator 时您的状态没有被清除,如果您希望组件在退出并自动清除状态时卸载,您可以使用 stackNavigator

另一种方法是使用状态管理库,例如 redux 或 flux,并在用户注销时清除状态。

要确保组件已卸载,您可以使用 createSwitchNavigator

您可以将一个 loginScreen 用作 child,而另一个 child 是您的 Drawer

注销时清除 asyncStorage,然后导航到 loginScreen,SwitchNavigator 将卸载抽屉。

DrawerNavigation 将保持屏幕处于活动状态,同时在每个屏幕的第一个焦点之后的 child 秒之间移动,使每个 componentDidMount 仅在第一次渲染时被触发。