Nano Hash - криптовалюты, майнинг, программирование

Сбросить историю навигации на экран входа в систему, используя реагирующую навигацию

Я хотел бы, чтобы после входа в систему (приветствие) пользователь перешел на главную страницу. Я сбрасываю историю, чтобы пользователь не мог вернуться назад следующим образом:

const actionToDispatch = NavigationActions.reset({
            index: 0,
            actions: [NavigationActions.navigate({ routeName: 'Home' })]
        });

        this.props.navigation.dispatch(actionToDispatch);

Это работает правильно. После нажатия «Выход» пользователь должен вернуться к приветствию, но это не работает. Вот что именно я делаю:

const resetAction = NavigationActions.reset({
            index: 0,
            actions: [
                NavigationActions.navigate({ routeName: 'Welcome' }),
            ]
        });

        this.props.navigation.dispatch(resetAction);

Ошибка говорит, что нет маршрута для «Добро пожаловать». Должен быть одним из «Основных», «Конфиденциальности», «Условий», которые являются маршрутами одной из вкладок на главной странице. См. их ниже:

 const AppStack = StackNavigator({
                    Welcome: {
                        screen: Welcome
                    },
                    Home: {
                        screen: Tabs
                    }
                }, {
                        initialRouteName: this.state.isLoggedIn ? 'Home' : 'Welcome',
                        headerMode: 'none'
                    }
                );

export const ProfileStack = StackNavigator({
    Profile: {
        screen: Profile,
    },
});

export const SettingsStack = StackNavigator({
    Settings: {
        screen: Settings,
    },
}, {
    });

export const InfoStack = StackNavigator({
    Main: {
        screen: Main,
    },
    Privacy: {
        screen: Privacy
    },
    Terms: {
        screen: Terms
    }
});

const routeConfiguration = {

    Profile: { screen: ProfileStack },
    Settings: { screen: SettingsStack },
    Info: { screen: InfoStack }
};

const tabBarConfiguration = {
    tabBarOptions: {
        activeTintColor: 'white',
        inactiveTintColor: 'lightgray',
        labelStyle: {
            fontSize: Normalize(10),
            fontFamily: Fonts.book
        },
        style: {
            backgroundColor: Colors.greenLightGradient,
            borderTopWidth: 1,
            borderTopColor: Colors.tabGreenLine
        },
    }
};

export const Tabs = TabNavigator(routeConfiguration, tabBarConfiguration);

Ответы:


1

Я нашел решение здесь: https://github.com/react-community/react-navigation/pull/789.

const resetAction = NavigationActions.reset({
            index: 0,
            actions: [
                NavigationActions.navigate({ routeName: 'Welcome' }),
            ],
            key: null
        });

this.props.navigation.dispatch(resetAction);

key: null — важная часть.

19.04.2017
  • У меня такой же код, но он у меня не работает. Это работает только на StackNavigator? Я использую TabNavigator. 07.08.2017
  • Да, я думаю, что это не работает для TabNavigator. Но вам следует проверить еще раз, потому что это было несколько месяцев назад, когда я в последний раз проверял это. 07.08.2017
  • Я также обнаружил, что это не работает для меня, создал вопрос здесь: stackoverflow.com/questions/45575437/ 08.08.2017

  • 2

    Для всех, кто ищет React Navigation 3.x and 4.x решение

    import {NavigationActions, StackActions} from 'react-navigation';
    
     const resetAction = StackActions.reset({
          index: 0,
          actions: [NavigationActions.navigate({routeName: 'Home'})],
          key: null,
        });
        this.props.navigation.dispatch(resetAction);
    

    React Navigation перемещает метод сброса на StackActions, начиная с версии 3.x.

    09.12.2019
  • о да, это работает для RN ​​3.x и 4.x! спасибо Джон! 08.04.2020

  • 3

    замените дом на любой экран, для которого вы хотите сбросить историю (v5)

    import { CommonActions } from '@react-navigation/native';
      navigation.dispatch(state => {
     // Remove the home route from the stack
     const routes = state.routes.filter(r => r.name !== 'Home');
    
     return CommonActions.reset({
    ...state,
    routes,
    index: routes.length - 1,
    });
    });
    
    29.04.2021
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..