#reactjs #react-native #react-navigation
Вопрос:
Я пытаюсь добавить кнопку «Шестеренка» в headerRight
заголовке навигации для всех экранов моего приложения. Я добавил кнопку ScreenOptions
Stack.Navigator
внутри a NavigationContainer
в свой App.js
, чтобы у всех Stack.Screens
внутри этого стека была эта кнопка в заголовке.
Теперь мне нужно нажать эту кнопку, чтобы перейти на другой экран (экран настроек). Я не могу добавить navigation.navigate('settingsScreen')
событие onPress кнопки, как я делаю с экранов, потому что в App.js файл. Вот мой фрагмент кода.
const Stack = createStackNavigator();
const myStack = () => {
return (
<NavigationContainer>
<Stack.Navigator
screenOptions={{
headerRight: () => (
<Button
title='Gears'
onPress={() => {}} // no navigation prop available on this file
/>
),
}}
>
<Stack.Screen
name='Home'
component={HomeScreen}
options={{ title: 'Home' }}
/>
<Stack.Screen
name='Add new expense'
component={AddNewExpense}
/>
<Stack.Screen
name='Settings'
component={SettingsScreen}
/>
</Stack.Navigator>
</NavigationContainer>
);
}
Как этого можно достичь? Заранее спасибо!
Комментарии:
1. Я попытался поместить стек в «Суперстек» и передать весь Stack.Navigator в качестве компонента
SuperStack.Screen
только для того, чтобы я мог использовать navigation.navigate() для кнопки «Шестеренка» при нажатии, и это работает (теперь с вложенными заголовками), но это похоже на обман. Есть ли более эффективный способ сделать это с помощью навигации по реакции?
Ответ №1:
Варианты экрана получат навигационную опору и опору маршрута для каждого экрана см. Здесь
screenOptions={({ navigation}) => ({
//you can use navigation now
headerRight: () => (
<Button
title='Gears'
onPress={() => navigation.navigate('settingsScreen')}
/>
),
})}