Как сбросить конкретный навигатор стека извне?

Я делаю приложение, использующее реагирующую навигацию с реагирующим родным.

Структура моего приложения такова,

Main Tab
  - Tab 1 (Stack)
    - screen A
    - screen B
    - screen C
  - Tab 2 (Stack)
    - screen D
    - screen E
    - screen F

Я хочу сбросить вкладку 1 (навигатор стека) в определенное время и не переходить на вкладку 1.

если пользователь находится на экране F, я просто хочу сбросить вкладку 1 (стек), не позволяя пользователю перейти на вкладку 1.

Поэтому я думаю, что отправка действий навигации должна запускаться вне этих компонентов реакции, где-то вроде resetHelper.js

Но я не могу понять, как сбросить конкретный стек, не перемещаясь по нему.

Любая помощь будет оценена по достоинству. Заранее спасибо!


person HB.K    schedule 29.08.2019    source источник


Ответы (1)


Обычно, если вы находитесь в определенном стеке, вы выполняете сброс с помощью this.props.navigation.reset(), но поскольку вы хотите сбросить один стек из другого стека, вам нужно будет использовать NavigationService для StackNavigator, который необходимо сбросить.

Прочтите это справочное руководство, чтобы узнать, как создать NavigationService .

После настройки NavigationService отредактируйте NavigationService.js на следующее:

import { StackActions, NavigationActions } from 'react-navigation';

let _navigator;

function setTopLevelNavigator(navigatorRef) {
  _navigator = navigatorRef;
}

function reset(index = 0, actions) {
  _navigator.dispatch(
    StackActions.reset({
      index,
      actions
    })
  );
}

// add other navigation functions that you need and export them

export default {
  reset,
  setTopLevelNavigator,
};

Затем из любой функции в любом файле сделайте следующее:

import {reset} from NavigationService.js
//your other code and functions here.
reset(0, actions)

Подробнее об этом здесь.

person thecodrr    schedule 29.08.2019