Как мне перейти к вершине стека (на react-navigation-v5)? - PullRequest
0 голосов
/ 03 августа 2020

Используя React-Navigation v5, я хочу перейти к первому экрану стека (а не к последнему экрану, который я последний раз посещал в этом стеке.)?

Я пробовал использовать dispatch(StackActions.popToTop()). Однако это вызывает ошибку, если пользователь уже находится на вершине стека!

Ошибка: The action 'POP_TO_TOP' was not handled by any navigator. Is there any screen to go back to? This is a development-only warning and won't be shown in production.

import { StackActions } from "@react-navigation/native";

props.navigation.navigate("MyStack");

// The following works most of the time. However, it causes an error if the user is already on top of the stack! 
props.navigation.dispatch(StackActions.popToTop()); 

1 Ответ

0 голосов
/ 03 августа 2020

Следующий код вроде работает.

Однако это довольно длинный код для такого базового c (я думаю) требования. Интересно, есть ли более простое решение.

Более того, он использует объект состояния навигатора, который документация НЕ рекомендует использовать. Он говорит на https://reactnavigation.org/docs/navigation-actions#reset, « Учитывайте объект состояния навигатора должен быть внутренним и может быть изменен в незначительной версии."

import { CommonActions } from "@react-navigation/native";

// more code...

props.navigation.dispatch(state => {
    // Find (by name) the stack, which I need to reset 
    let i; 
    for (i = 0; i < state.routes.length; i++) {
        if (state.routes[i].name === "MyStack") {
            break;
        }
    }
    // If there has been any activity for the stack, which we found above, we reset it 
    let routes2 = { ...state.routes };
    if (routes2[i].state) { 
        delete routes2[i].state;
    }
    return CommonActions.reset({
        ...state,
        routes2,
    });
});
props.navigation.navigate("MyStack");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...