#reactjs #react-native #navigation #react-navigation #screen
#reactjs #реагировать-родной #навигация #реакция-навигация #экран
Вопрос:
Итак, вот созданный мной навигационный контейнер:
<NavigationContainer>
<Stack.Navigator
screenOptions={{
headerShown: false
}}
>
<Stack.Screen name="Home" component={HomeScreen} />
<Stack.Screen name="Music" component={MusicScreen} />
<Stack.Screen name="Profile" component={ProfileScreen} />
</Stack.Navigator>
</NavigationContainer>
Но мне не нужно, чтобы кнопка была уникальной на каждом экране, будет 3 кнопки, которые будут отображаться на всех экранах. Итак, вот моя функция map, в которой я отображаю все свои кнопки:
{tabs.map(({ icon, line }, index) => (
<View key={ index }>
<Tab
{...{ index, transition, active }}
onPress={() => {
active.setValue(index);
if (index == 0) {
navigation.navigate('Music')
} else if (index == 1) {
navigation.navigate('Home')
} else if (index == 2) {
navigation.navigate('Profile')
}
}}
>
{icon}
</Tab>
<View style={styles.blueLineContainerBack}>
<LineWrapper
{...{activeTransition, active, line, index}}
/>
</View>
</View>
))}
Пока я нажимаю на кнопку, я получаю ошибку undefined не является объектом (оценка ‘navigation.navigate’). Как я могу это исправить?
Комментарии:
1. похоже, вы хотите использовать навигацию по вкладкам вместо навигации по стеку. reactnavigation.org/docs/tab-based-navigation
2. Не совсем, потому что я уже пробовал это, и это не работает должным образом
3. Я думаю, вы можете использовать withNavigation (ComponentName) для использования реквизитов навигации в этом компоненте.
Ответ №1:
Важно отметить, что navigation
это определено только в компонентах экранов. В вашей функции onPress вызовите перехват useNavigation, чтобы получить доступ к навигации. Что-то вроде этого должно работать:
const navigation = useNavigation();
И вам нужно импортировать его из React Navigation как таковой:
import { useNavigation } from '@react-navigation/native';
Ответ №2:
Если вы находитесь на одном из «экранов», которые вы определили (Home, Profile, Music), библиотека React-Navigation передает в них «навигационный» реквизит. Поэтому вы должны использовать его, как показано ниже:
props.navigation.navigate('Music');
Если это тоже не удается, вы можете использовать навигационные крючки react для доступа к объекту навигации следующим образом:
import { useNavigation } from '@react-navigation/native';
const MyComponent = () => {
const navigation = useNavigation();
...
return(
...
<Button title="Go to music" onPress={() => { navigation.navigate('Music'); }} />
);
};
export default MyComponent;