关于反应导航v5的问题。
在以前的版本中,我们可以通过在StackNavigator
内执行以下操作来指定特定路线的自定义过渡,而不是屏幕:
transitionConfig: () => ({
screenInterpolator: sceneProps => {
const {scenes, scene} = sceneProps;
const prevRoute = scenes[0].route.routeName === 'Route A';
// If prev route is A, and then current route is B, then we do a specific transition
if (prevRoute && scene.route.routeName === 'Route B') {
return StackViewStyleInterpolator.forVertical(sceneProps);
}
// Otherwise default to normal transition
return StackViewStyleInterpolator.forHorizontal(sceneProps);
},
}),
现在,我正在尝试为react-navigation v5实现相同的功能。我知道我可以通过执行以下操作来为每个屏幕指定自定义动画:
<Stack.Screen name="Route B" component={RouteB} options={{ cardStyleInterpolator: CardStyleInterpolators.forVerticalIOS }} />
问题是我不希望每次导航到RouteB
时都应用此过渡,仅当上一条路线为RouteA
时,我才希望应用此过渡,就像之前的代码一样在上面阻止。
在文档中找不到任何示例,因此希望在将代码迁移到v5方面有所帮助。
答案 0 :(得分:3)
类似的事情应该起作用:
options={({ navigation, route }) => {
const state = navigation.dangerouslyGetState();
const index = state.routes.indexOf(route);
const previousRoute = state.routes[index - 1];
if (previousRoute?.name === 'RouteA') {
return {
cardStyleInterpolator: CardStyleInterpolators.forVerticalIOS,
gestureDirection: 'vertical',
};
} else {
return {};
}
}}