#javascript #react-native #react-navigation
#javascript #реагировать-родной #реакция-навигация
Вопрос:
В моем react native
приложении у меня есть header
, и оно состоит из:
export default class foto extends Component {
.
.
.
.
static navigationOptions = {
headerTitle: <Titulo/>,
headerTitleStyle: {
color: 'white',
},
headerRight: <MenuIcon/>,
headerLeft: <HomeIcon/>,
headerStyle: {
backgroundColor: '#d87c3a'
}
};
}
И я хочу, чтобы, когда я нажимаю headerRight
, чтобы перейти к компоненту, проблема в том, что при попытке я получаю сообщение об ошибке: Cannot read property 'navigate' of undefined
Находится за <MenuIcon/>
пределами default class foto
, но в том же файле
Код меню:
class MenuIcon extends React.Component{
render(){
return(
<TouchableOpacity style={{marginRight:10}}>
<Icon name={'md-menu'} size={26} color='white'
onPress={() => this.props.navigation.navigate('menu')}/>
</TouchableOpacity>
)
}
}
Мой StackNavigator на App.js
:
const AppNavigator = createStackNavigator({
login2: {
screen: Login2
},
foto: {
screen: Foto
},
menu: {
screen: Menu
}
}, {
initialRouteName: 'login2',
});
export default createAppContainer(AppNavigator);
Мой импорт:
import React, { Component } from 'react'
import { Text, View, ImageBackground, Image, TextInput, TouchableOpacity, TouchableHighlight, Button } from 'react-native';
import { createStackNavigator, createAppContainer } from "react-navigation";
import AsyncStorage from '@react-native-community/async-storage';
import Icon from 'react-native-vector-icons/Ionicons';
Как я могу решить свою проблему?
Комментарии:
1. не профессионал с reactr, но видеть «это» в любом виде javascript никогда не является хорошей идеей ОО
2. @jonathanHeindl Я просто делаю так, как указано в документации по ссылке
3. каковы ваши импортные данные?
4. Я уже добавил к своему вопросу
5. единственное отличие, которое я заметил, это то, что в примере вокруг него есть элемент view, возможно, это важно
Ответ №1:
Вам нужно передать навигацию вашему <MenuIcon/>
, чтобы ваша навигация была примерно следующей:
const AppNavigator = createStackNavigator({
login2: {
screen: Login2
},
foto: {
screen: Foto,
navigationOptions: ({ navigation }) => ({
headerTitle: <Titulo/>,
headerTitleStyle: {
color: 'white',
},
headerRight: <MenuIcon navigation={navigation}/>,
headerLeft: <HomeIcon/>,
headerStyle: {
backgroundColor: '#d87c3a'
}
})
},
menu: {
screen: Menu
}
}, {
initialRouteName: 'login2',
});
export default createAppContainer(AppNavigator);
Это должно позволить вам перемещаться из компонента MenuIcon
Обратите внимание, что вам не нужны параметры навигации в классе Foto, и не забудьте импортировать как MenuIcon, так и HomeIcon на страницу stack navigator
Надеюсь, это решит вашу проблему.
Комментарии:
1. Спасибо! Это решило мою проблему. И последний вопрос: для всех моих экранов с заголовком я должен действовать, как в этом?
2. Конечно, вы можете следовать этому подходу