我正在为我的移动应用程序使用反应导航,我有 2 条路线 - 主页和收藏夹,其中主页是初始路线。这两个组件都有 componentDidMount。每当我从主页导航到收藏夹时,收藏夹组件都会挂载,但是当我导航回主页时,它的组件DidMount不会执行。它仅在我第一次打开应用程序时执行,但我每次导航到它时都需要挂载它。
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"不会再次运行,因为"Home"组件已经创建,只要它在堆栈中,它就会继续存在。主页组件的该实例将被重用,用户在返回到该主页组件时将从上次中断的地方继续。要再次运行 componentDidMount,您需要启动 Home 组件的新实例。
而不是使用后退按钮。创建一个按钮,然后在 onPress 道具中使用 push 方法导航到 Home 的新实例。
<Button
title="Home"
onPress={() => this.props.navigation.push('Home')}
/>
https://reactnavigation.org/docs/en/navigating.html#going-back
编辑:
虽然这将使您的应用程序暂时运行; sfratini 提出了一个很好的观点,如果您最终为公司/客户工作或发布自己的应用程序,他的答案对您来说会更好。 出于他说的所有原因,添加听众将是理想的选择。
雷蒙德的答案应该有效,解释是一样的。ComponentDidMount 只运行一次,不需要再次运行,因为您的堆栈中有家。
我建议在组件WillReceiveProps上添加一个侦听器,当主屏幕再次加载时,它也应该触发,您可以查看是否需要刷新或重新加载屏幕。
但是,当然,这取决于您的用例。如果您继续在堆栈上推动主屏幕,唯一的缩小是一旦用户到达主页,通常后退按钮应该意味着"离开应用程序",如果您将其推送到堆栈并按回,您将只返回一个屏幕。成为糟糕的用户体验,但如果这对你有用,很好。