Как указать пользовательские переходы для указанных c маршрутов, а не экранов (v5) - PullRequest
0 голосов
/ 25 февраля 2020

Вопрос относительно response-navigation v5.

В предыдущих версиях мы могли указывать пользовательский переход для указанных c маршрутов, не для экранов , выполняя следующие действия внутри 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);
        },
      }),

Теперь я пытаюсь добиться того же самого в реакции-навигации v5. Я знаю, что могу указать пользовательскую анимацию для каждого экрана, выполнив что-то вроде:

<Stack.Screen name="Route B" component={RouteB} options={{ cardStyleInterpolator: CardStyleInterpolators.forVerticalIOS }} />

Проблема в том, что я не хочу, чтобы этот переход применялся каждый раз, когда он перемещается к RouteB, ТОЛЬКО когда предыдущий маршрут RouteA, я хочу применить этот переход, как и предыдущий блок кода выше.

Не удалось найти ни одного примера в документации, поэтому был бы признателен за помощь при переносе кода в v5. .

1 Ответ

1 голос
/ 25 февраля 2020

Примерно так должно работать:

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 {};
  }
}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...