Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当我从其他屏幕导航到初始路径时,为什么componentDidMount不执行?_Javascript_React Native_Navigation_React Native Android_Android Lifecycle - Fatal编程技术网

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

Javascript 当我从其他屏幕导航到初始路径时,为什么componentDidMount不执行?,javascript,react-native,navigation,react-native-android,android-lifecycle,Javascript,React Native,Navigation,React Native Android,Android Lifecycle,我正在为我的移动应用程序使用react导航,我有两条路线-Home和Favoriti,其中Home是初始路线。这两个组件都具有componentDidMount。每当我从主页导航到Favoriti时,Favoriti组件都会挂载,但当我导航回主页时,它的componentDidMount不会执行。它只在我第一次打开应用程序时执行,但每次导航到它时,我都需要安装它 import { createStackNavigator, createAppContainer} from 'react-navi

我正在为我的移动应用程序使用react导航,我有两条路线-Home和Favoriti,其中Home是初始路线。这两个组件都具有componentDidMount。每当我从主页导航到Favoriti时,Favoriti组件都会挂载,但当我导航回主页时,它的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;

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

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

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

<Button
  title="Home"
  onPress={() => this.props.navigation.push('Home')}
/>
编辑:


这将使你的应用程序暂时运行;斯弗拉蒂尼的观点很好,如果你最终为一家公司/客户工作或发布自己的应用程序,他的答案对你来说会更好。出于他所说的所有原因,添加一个侦听器将是理想的选择。

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

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

<Button
  title="Home"
  onPress={() => this.props.navigation.push('Home')}
/>
编辑:


这将使你的应用程序暂时运行;斯弗拉蒂尼的观点很好,如果你最终为一家公司/客户工作或发布自己的应用程序,他的答案对你来说会更好。就他所说的所有理由而言,增加一个听众是理想的选择。

雷蒙德的答案应该是可行的,解释也是一样的。ComponentDidMount只运行一次,它不需要再次运行,因为堆栈中有Home

我建议在组件WillReceiveProps上添加一个监听器,当主屏幕再次加载时,该监听器也应该启动,您可以查看是否需要刷新或重新加载屏幕


当然,这取决于您的用例。如果你一直按堆栈上的主屏幕,唯一的缩减是一旦用户到达主屏幕,通常“后退”按钮应该意味着离开应用程序,如果你将其按到堆栈上,然后按“后退”,你将只返回一个屏幕。这是很糟糕的UX,但如果它对你有用,那就好了

雷蒙德的答案应该是可行的,解释也是一样的。ComponentDidMount只运行一次,它不需要再次运行,因为堆栈中有Home

我建议在组件WillReceiveProps上添加一个监听器,当主屏幕再次加载时,该监听器也应该启动,您可以查看是否需要刷新或重新加载屏幕


当然,这取决于您的用例。如果你一直按堆栈上的主屏幕,唯一的缩减是一旦用户到达主屏幕,通常“后退”按钮应该意味着离开应用程序,如果你将其按到堆栈上,然后按“后退”,你将只返回一个屏幕。这是很糟糕的UX,但如果它对你有用,那就好了

谢谢你的回答。我尝试添加一个监听器,但当我回到主屏幕时,componentWillReceiveProps无法启动。用替换代替导航对我来说很有效。谢谢你的回答。我尝试添加一个监听器,但当我回到主屏幕时,componentWillReceiveProps无法启动。使用“替换”而不是“导航”对我来说很有效。