React Native получить объект навигации вне компонента экрана

Мне нужно иметь возможность перемещаться и сбрасывать стек навигации из модулей, которые не обязательно являются компонентами экрана. Это значит, я не могу использовать:

const {navigate} = this.props.navigation;

В моем случае мне нужно правильно перенаправить пользователя на нужный экран, когда он нажимает на push-уведомление. У меня есть только обратный звонок:

onNotification: function(notification) {
    // show correct screen and reset navigation stack
}

Мне просто нужно больше гибкости с навигацией. Так как я могу сделать это для моего случая?

2 ответа

Решение

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

import React, {Component} from 'react';

export default class Base extends Component {
    static screen;

    constructor(props) {
        super(props);
        Base.screen = this; 
    }

    nav() {
        return this.props.navigation;
    }
}

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

Base.screen.nav().navigate(...);

Я создал компонент экрана с поддержкой навигации, чтобы позаботиться об этом на экранах.

За пределами экрана вы можете получить прямой доступ к store.navigation. Я использовал это с редуксом в моем примере. Посмотрите, поможет ли это вам.

https://github.com/aajiwani/react-navigation-aware-helper

Другие вопросы по тегам