当我从其他屏幕导航到初始路由时,为什么 componentDidMount 不执行?

Arm*_*vić 1 javascript navigation android-lifecycle react-native react-native-android

我正在为我的移动应用程序使用 react-navigation,我有 2 条路线 - Home 和 Favoriti,其中 Home 是初始路线。这两个组件都有 componentDidMount。每当我从 Home 导航到 Favoriti 时,Favoriti 组件都会挂载,但是当我导航回 Home 时,它​​的 componentDidMount 不会执行。它仅在我第一次打开应用程序时执行,但我每次导航到它时都需要挂载它。

import { createStackNavigator, createAppContainer} from 'react-navigation';
import  Home  from './views/Home';
import Favoriti from './views/Favoriti';

const MainNavigator = createStackNavigator({

    FavoritiRT: Favoriti,
    HomeRT: Home
  },
  {
    initialRouteName: "HomeRT"
  }
);

const MyRoutes = createAppContainer(MainNavigator);

export default MyRoutes;
Run Code Online (Sandbox Code Playgroud)

没有错误显示,只是初始路由的 componentDidMount 不会在我每次导航到它时执行,但在其他路由中它会执行。

Ray*_*aba 5

“componentDidMount”不会再次运行,因为“Home”组件已经创建并且只要它在堆栈中就会继续存在。Home 组件的那个实例将被重用,当用户返回到那个 Home 组件时,他们将继续他们离开的地方。要再次运行 componentDidMount,您需要启动 Home 组件的新实例。

而不是使用后退按钮。创建一个按钮并在 onPress 属性中使用 push 方法导航到 Home 的新实例。

<Button
  title="Home"
  onPress={() => this.props.navigation.push('Home')}
/>
Run Code Online (Sandbox Code Playgroud)

https://reactnavigation.org/docs/en/navigating.html#going-back

编辑:

虽然这将使您的应用程序暂时运行;sfratini 提出了一个很好的观点,如果您最终为公司/客户工作或发布自己的应用程序,他的回答对您会更好。出于他所说的所有原因,添加侦听器将是理想的选择。