在导航到路线的其他地方路线
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
的东西
我在 useFocusEffect
和 replace
上使用它,但它有一个动画。有没有办法避免那个动画?
useFocusEffect(useCallback(() => {
if (programs.length === 1) {
navigation.replace('Class List', {
...route.params,
programId: programs[0].programID
})
}
}, []))
至少在我从标签栏导航时解决动画问题。我必须创建一条新路线并将其设为新的初始路线,这样如果我导航到根页面,我将使用 useFocuseEffect
如上所述路由到正确的路线,并将其应用于通向我需要的屏幕的组合还返回 null
和 headerShown: false
以防止显示任何内容。
使用 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
我在 useFocusEffect
和 replace
上使用它,但它有一个动画。有没有办法避免那个动画?
useFocusEffect(useCallback(() => {
if (programs.length === 1) {
navigation.replace('Class List', {
...route.params,
programId: programs[0].programID
})
}
}, []))
至少在我从标签栏导航时解决动画问题。我必须创建一条新路线并将其设为新的初始路线,这样如果我导航到根页面,我将使用 useFocuseEffect
如上所述路由到正确的路线,并将其应用于通向我需要的屏幕的组合还返回 null
和 headerShown: false
以防止显示任何内容。