Убедитесь, что маршрут, указанный в initialRouteName, всегда добавляется в качестве первого экрана в стеке

#react-navigation #react-navigation-v5

#реагирующая навигация #реагирующая навигация-v5

Вопрос:

В нашем приложении есть несколько вкладок, каждая вкладка содержит стек. Нам нужно иметь возможность перемещаться с экрана в стеке, принадлежащем одной вкладке, на конкретный экран в стеке, принадлежащем другой вкладке. Это можно сделать следующим образом navigation.navigate(«tab2″, {screen:»screen2»}).

Мы используем react-navigation версии 5

Текущее поведение

Проблема в том, что если я ранее не переходил к начальному маршруту для стека назначения (route), screen2 теперь является единственным экраном в стеке. Мне нужно каким-то образом всегда следить за тем, чтобы экран, указанный в initialRouteName, добавлялся в стек первым.

Ожидаемое поведение

Если вы укажете initialRouteName, этот маршрут всегда добавляется в качестве первого маршрута в стеке, даже если вы переходите к конкретному маршруту, определенному в стеке.

Установка lazy = false решила бы проблему, но важно не инициализировать «начальный экран маршрута» перед фактическим переходом к экрану в стеке.

Возможно, это работает так, как задумано, но есть ли какой-либо способ добиться ожидаемого поведения?

Как воспроизвести

Проблема может быть воспроизведена в этой закуске, нажмите кнопку «Перейти к экрану2 на вкладке 2» на «tab1». Убедитесь, что вы не нажали на Tab2, прежде чем делать это. Теперь вы перейдете к Screen2 на Tab2 без возможности перехода к экрану, указанному в initialRouteName.

Это более или менее копия этой проблемы

Ответ №1:

Обнаружил, что вы действительно можете перейти к вложенному навигатору и убедиться, что маршрут, указанный в initialRouteName, является начальным маршрутом. Это можно сделать, указав initial:false вот так:

 navigation.navigate("tab2", {screen:"screen2", initial: false})
  

Документацию можно найти здесь