Как перейти к определенному экрану, когда стек навигации пуст? - PullRequest
0 голосов
/ 02 марта 2019

Как я могу это сделать:

if navigation stack is not empty
    this.props.navigation.goBack()
else
    this.props.navigation.navigate('CustomScreen')

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

В this.props.navigation есть функция с именем dangerouslyGetParent.Вы можете увидеть это в документации здесь .

В документации говорится следующее:

Еще один хороший пример использования этого - найти индексактивный маршрут в списке маршрутов родителя.Таким образом, в случае стека, если вы находитесь с индексом 0, вы можете не отображать кнопку возврата, но если вы находитесь где-то еще в списке, то вы должны отобразить кнопку возврата.

Таким образом, мы можем использовать следующее, чтобы получить индекс маршрута

this.props.navigation.dangerouslyGetParent().state.index

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

// get the index of the route
let index = this.props.navigation.dangerouslyGetParent().state.index;
// handle the index we get
if (index > 0) {
    this.props.navigation.goBack();
} else {
    this.props.navigation.navigate('CustomScreen')
}
0 голосов
/ 02 марта 2019

Обходное решение отправляет параметр с предыдущего экрана и в текущем экране проверяет, существует ли этот параметр

Screen1:

this.props.navigation.navigate('Screen2', {prevScreen: 'Screen1'});

Screen2:

if(this.props.navigation.getParam('prevScreen', null))
    this.props.navigation.goBack();
else
    this.props.navigation.navigate('CustomScreen');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...