Как выполнить функцию в другом стеке экранов в response-native-navigation v3? - PullRequest
0 голосов
/ 30 января 2020

Я использую RNN v3.7.0, и моей текущей ситуации нужна эта конкретная c функция, но, возможно, я неправильно ее проектирую.

У меня есть 3 основные вкладки, которые являются стеками, в одной из их, давайте назовем это # ​​2, когда приложение запускается впервые для вновь созданного пользователя, я проверяю права доступа к местоположению, конечно, это asyn c. В то же время, # 1 пытается получить данные при монтировании, но поскольку данные о местоположении еще не готовы, данные не будут получены из бэкэнда, потому что мне нужны эти значения lat и long.

Идея состояла бы в том, чтобы вызывать функцию, расположенную на экране № 1, всякий раз, когда экран № 2 заканчивает получать данные о местоположении асинхронно, поскольку также требуется, чтобы пользователь разрешил использование служб определения местоположения.

Есть ли способ добиться этого с помощью RNN v3? Пытаться подумать, возможно ли это с Redux, но не могу придумать, как это сделать, не кажется, что это нужно делать, потому что мне не нужен магазин для этого, это просто функция.

Это моя текущая структура стеков:

const startTabs = () => {
    Navigation.setRoot({
        root: {
            bottomTabs: {
                animate: true,
                visible: false,
                drawBehind: true,
                waitForRender: true,
                options: {
                    bottomTabs: {
                        animate: false,
                        elevation: 8,
                        titleDisplayMode: 'alwaysShow',
                        backgroundColor: commonStyles.WHITE
                    }
                },
                children: [
                    {
                        stack: {
                            id: 'HomeStack',
                            children: [
                                {
                                    component: {
                                        id: 'HomeTab',
                                        name: 'myApp.HomeTab'
                                    }
                                }
                            ],
                            options: {
                                bottomTab: {
                                    fontSize: 10,
                                    text: i18n.t('home'),
                                    icon: iconsMap['home-light'],
                                    selectedIcon: iconsMap['home-solid'],
                                    ...navigatorStyle
                                }
                            }
                        }
                    },
                    {
                        stack: {
                            id: 'MyProfileTabStack',
                            children: [
                                {
                                    component: {
                                        id: 'MyProfileTab',
                                        name: 'myApp.MyProfileTab'
                                    }
                                }
                            ],
                            options: {
                                bottomTab: {
                                    fontSize: 10,
                                    text: i18n.t('myProfile'),
                                    icon: iconsMap['user-light'],
                                    selectedIcon: iconsMap['user-solid'],
                                    ...navigatorStyle
                                }
                            }
                        }
                    },
                    {
                        stack: {
                            id: 'MessageTabStack',
                            children: [
                                {
                                    component: {
                                        id: 'MessageScreen',
                                        name: 'myApp.MessageScreen'
                                    }
                                }
                            ],
                            options: {
                                bottomTab: {
                                    fontSize: 10,
                                    text: i18n.t('messages'),
                                    icon: iconsMap['message-light'],
                                    selectedIcon: iconsMap['message-solid'],
                                    badgeColor: 'red',
                                    ...navigatorStyle
                                }
                            }
                        }
                    }
                ]
            }
        }
    });
}

Теперь, имея эту структуру, разрешение местоположения обрабатывается в пользовательском ProfileScreen, и я хотел бы запускать функцию в HomeScreen всякий раз, когда местоположение хранится в БД.

Заранее спасибо.

...