在导航到路线的其他地方路线

Route elsewhere on navigate to route

使用 React-Navigation 转到特定页面我会这样做:

navigation.navigate('ProgramNav', {
  screen: "Programs"
});
navigation.navigate('ProgramNav', {
  screen: "Class List",
  params: {
    programId,
  }
});
navigation.navigate('ProgramNav', {
  screen: "Student Items",
  params: {
    programId,
    studentId,
  }
});
navigation.navigate('ProgramNav', {
  screen: "Student Item View",
  params: {
    programId,
    studentId,
    itemId
  }
});

到目前为止,这还不是什么大问题,但我想要的是能够做到这一点,以便当我导航到 "Programs" 屏幕时,它会检查是否有一个程序.如果是这样,它会自动导航到带有该程序的 "Class List"(理想情况下将其自身从堆栈中移除)。 但是 我希望该逻辑位于 ProgramsScreen 组件中,而不是我执行 navigation.navigate.

的位置

我还想确保当我点击 Back 时,它也会跳过屏幕。

我认为它类似于 navigation.replace(),但有类似 useFocusEffect

的东西

我在 useFocusEffectreplace 上使用它,但它有一个动画。有没有办法避免那个动画?

  useFocusEffect(useCallback(() => {
    if (programs.length === 1) {
      navigation.replace('Class List', {
        ...route.params,
        programId: programs[0].programID
      })
    }
  }, []))

至少在我从标签栏导航时解决动画问题。我必须创建一条新路线并将其设为新的初始路线,这样如果我导航到根页面,我将使用 useFocuseEffect 如上所述路由到正确的路线,并将其应用于通向我需要的屏幕的组合还返回 nullheaderShown: false 以防止显示任何内容。