реагировать-навигация: перейти на другой экран от кнопки в заголовке - PullRequest
1 голос
/ 05 апреля 2020

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

Я очень много искал это, но все решения для класса компонентов и официальной документации для этого нет.

Я использую собственную версию реагирования 0.61.4.

При нажатии на значок в заголовке справа я хочу переместить ' ProfileScreen. Вся остальная навигация работает нормально. У меня есть кнопка в «HomeScreen» для перехода к «ResultsScreen», но я не могу go в «ProfileScreen» из заголовка.

Вот фрагмент моего кода

const Stack = createStackNavigator();

const App = () => {
    return (
        <SafeAreaView style={{ flex: 1 }}>
            <NavigationContainer>
                <Stack.Navigator>
                    <Stack.Screen 
                        name="Home" 
                        component={HomeScreen}
                        options={
                            {
                                title: 'Home',
                                headerStyle: {
                                    backgroundColor: '#273469',
                                },
                                headerTintColor: '#EBF2FA',
                                headerRight: () => (
                                    <Icon
                                      onPress={() => navigate('ProfileScreen')}
                                      name="edit"
                                      type="material"
                                    />
                                ),
                            }
                        }
                    />
                    <Stack.Screen 
                        name="ResultsScreen" 
                        component={ResultsScreen}
                    />
                    <Stack.Screen 
                        name="ProfileScreen"
                        component={ProfileScreen}
                    />
                </Stack.Navigator>
            </NavigationContainer>
        </SafeAreaView>
    )
}

1 Ответ

1 голос
/ 05 апреля 2020

options может принимать функцию в качестве аргумента, а эта функция принимает prop в качестве параметра.

Вот документация

Вот код TypeScript определение для информации:

     * Navigator options for this screen.
     */
    options?: ScreenOptions | ((props: {
        route: RouteProp<ParamList, RouteName>;
        navigation: any;
    }) => ScreenOptions);

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

 options={({ navigation }) => ({
              title: 'Home',
              headerStyle: {
                backgroundColor: '#273469',
              },
              headerTintColor: '#EBF2FA',
              headerRight: () => (
                <Icon
                  onPress={() => navigation.navigate('ProfileScreen')}
                  name="edit"
                  type="material"
                />
              ),
            })}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...