为什么当我从其他屏幕导航到初始路径时组件 DidMount 不执行?

我的移动应用程序使用的是反应式导航 , 我有两条路 - Home 和 Favoriti , Home 是最初的路线。 这两个组件都有组件。 每当我从主页导航到 favoriti , favoriti 组件就会安装 , 但当我导航到 Home 时 , 它的组件 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;

没有错误显示 , 只是初始路径的组件 Didmount 并不是每次我导航到它时都执行的 , 但它与其他路径执行。


EN From: Why does componentDidMount not execute when I navigate to initial route from other screen?

2 Comments

  1. "组件Didmount"不再运行,因为"Home"组件已经创建,只要它在堆栈中就将继续存在该 Home 组件的实例将被重用 , 当用户返回该 Home 组件时 , 用户将继续使用它们所离开的地方。 要再次运行组件 Didmat , 需要启动一个 Home 组件的新实例。

    别用后面的按钮。 创建一个按钮 , 并在 onPress 道具导航到一个新实例家庭使用推法。

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

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

    编辑 :

    虽然这会让你的应用程序暂时运行 ; sfratini 说的很有道理 , 如果你最终为公司 / 客户工作或发布自己的应用程序 , 他的答案对你会更好。 由于他所说的所有原因 , 增加一个听众将是理想的。

  2. 雷蒙德的回答应该有效 , 解释是一样的。 CompentDidMount 只跑一次 , 它不需要再跑一次 , 就像你在堆栈中有家一样。

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

    当然 , 这取决于你的用例。 如果你继续在堆栈上按家庭屏幕 , 唯一的缩小就是一旦用户到达了家 , 通常后面的按钮应该是"离开应用程序",如果你把它推到堆栈,再按回来,你只会回到一个屏幕。 那是不好的 UX , 但如果它对你有用 , 那就好。

More articles:

  • 为什么不执行链接中的路径更改和向该地址的过渡 ?
  • 如何在导航到其他屏幕时保存碎片数据
  • <script>为什么我不能在定义. js源的标记中执行 JavaScript 函数 ? </script>
  • 用反应物在其他组件中渲染组件
  • 视窗 8.1 - javascript 之间的导航问题
  • 如何在全屏幕滑块上添加箭头
  • 在不改变浏览器 URL 的情况下 , 对更改路径 / 组件的路由器作出反应
  • 如何在通知打开的屏幕上导航?
  • 为什么这个 javascript 在 Chrome 中执行 , 而不是在 Firefox 中执行 ?
  • 为什么这个错误在返回本地的图像组件 ?
  • 如何使用 Drawer 导航动态更改屏幕
  • 用 json 数据和 javascript 创建导航菜单有什么好处或优势 ?
  • 用 javascript 禁用特定的链接 , 保持其他链接的活动
  • 为什么没有发现功能? 但是图书馆的其他功能是吗 ?
  • 如何捕捉绝对位置组件后面的触摸事件
  • 为什么我的回复本地应用程序会崩溃 ?
  • 为什么我打了 ajax 电话后不能浏览其他页面 ?
  • 如何从其他数组中减少数组值
  • 检测浏览器关闭 / 导航到其他页面并注销的最佳方法
  • 如何导出组件 Didmount (反应 / 反应本地) 变量
  • 输入值不能完全看到, 为什么?
  • 为什么"是"属性只在覆盖内置元素的网络组件上工作?
  • 如果屏幕被 HOC 包 , StackNavigator 屏幕的响应导航标头不会呈现
  • 使用后不会打开响应导航。
  • 没有回发的 Github UI 如何导航目录 ?
  • 为导航菜单创建"选定项目"javascript代码?
  • 在热重装时输入出口组件抛出错误
  • 响应本地 -"未定义不是对象(评估"MyApp.导航.openDrawer")
  • android 导航架构组件 - 系统的后退按钮退出应用程序
  • 在使用 React-本机时 , 为什么我的 iPhone 或模拟器要挂一个白色屏幕 , 除非 Chrome 调试正在运行 ?