我尝试根据this教程使用反应导航在React Native中实现导航,但在启动应用时遇到以下错误:
undefined不是对象(评估' this.props.navigation.navigate') render index.android.js:17:12
我的index.android.js:
import React, { Component } from 'react';
import {
AppRegistry,
StyleSheet,
Text,
View,
Button
} from 'react-native';
import {
StackNavigator,
} from 'react-navigation';
export default class Abc extends Component {
render() {
const { navigate } = this.props.navigation;
return (
<View style={styles.container}>
<Text style={styles.welcome}>
Welcome to React Native!
</Text>
<Button
title="Go to List"
onPress={() =>
navigate('Liste')
}
/>
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#F5FCFF',
},
welcome: {
fontSize: 20,
textAlign: 'center',
margin: 10,
},
instructions: {
textAlign: 'center',
color: '#333333',
marginBottom: 5,
},
});
export class HomeScreen extends React.Component {
static navigationOptions = {
title: 'Welcome',
};
render() {
const { navigate } = this.props.navigation;
return (
<Button
title="Go to List"
onPress={() =>
navigate('Profile')
}
/>
);
}
}
export class Liste extends React.Component {
static navigationOptions = {
title: 'Liste',
};
render() {
const { navigate } = this.props.navigation;
return (
<Button
title="Liste"
/>
);
}
}
const App = StackNavigator({
Home: { screen: HomeScreen },
Liste: { screen: Liste },
});
AppRegistry.registerComponent('Abc', () => Abc);
你有什么建议吗?谢谢!
答案 0 :(得分:2)
我相信您要做的是在App
而不是AppRegistry
组件中注册Abc
组件。
您遇到此undefined is not an object (Evaluating 'this.props.navigation.navigate')
的原因是props.navigation
组件中没有Abc
。如果仔细查看代码的底部,
你有:
const App = StackNavigator({
Home: { screen: HomeScreen },
Liste: { screen: Liste },
});
AppRegistry.registerComponent('Abc', () => Abc);
所以你已经创建了一个StackNavigator
组件,但是你没有注册这个组件,而是在Abc
和AppRegistry
组件中注册了Abc
组件。不是StackNavigator
下的任何屏幕,它无法访问this.props.navigation
,因此您会遇到异常。
答案 1 :(得分:1)
您没有Profile
屏幕
如果您想从Liste
转到HomeScreen
屏幕,请使用:
onPress={() => navigate('Liste')}
如果您想转到Profile
屏幕,则需要Profile Screen
并将其添加到StackNavigator
,例如:
export class Profile extends React.Component {
static navigationOptions = {
title: 'Profile',
};
render() {
const { navigate } = this.props.navigation;
return (
<Button
title="Profile"
/>
);
}
}
const App = StackNavigator({
Home: { screen: HomeScreen },
Liste: { screen: Liste },
Profile: {screen: Profile},
});
答案 2 :(得分:0)
反应导航现在是v5。我遇到的问题是因为“导航”没有传递给子组件。
经过更多研究,我从此处使用此解决方案解决了问题。
我需要像这样将道具传递给子组件。
<GoToButton navigation={props.navigation} />
https://reactnavigation.org/docs/connecting-navigation-prop
希望这对像我这样的新手有帮助。