I am developing a react native application and I am attempting to route the user to the next view after successfully logging in through Facebook.
The problem is that I continue to get an error stating "Cannot read property 'push' of undefined." I have checked all the related answers on the forum and I have made sure to include NavigatorIOS and bind(this) on my function call - so those are the issue.
I would love assistance in determining what is wrong, as I am a novice dev.
Error: Cannot read property 'push' of undefined
stack:
<unknown> index.ios.bundle:1498
MessageQueue.__invokeCallback index.ios.bundle:7235
<unknown> index.ios.bundle:7151
guard index.ios.bundle:7104
<unknown> index.ios.bundle:7151
<unknown> index.ios.bundle:7148
ReactDefaultBatchingStrategyTransaction.Mixin.perform index.ios.bundle:6552
Object.ReactDefaultBatchingStrategy.batchedUpdates index.ios.bundle:15885
Object.batchedUpdates index.ios.bundle:5084
URL: undefined
line: undefined
message: Cannot read property 'push' of undefined
============================
'use strict';
var React = require('react-native');
var Main = require('./App/Components/Main');
var Icon = require('./node_modules/react-native-vector-icons/FontAwesome');
var FacebookLoginManager = require('NativeModules').FacebookLoginManager;
var {
AppRegistry,
StyleSheet,
Text,
View,
TouchableHighlight,
NavigatorIOS,
Navigator,
} = React;
var 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,
marginTop: 10
},
icon: {
fontSize: 20,
color: 'white',
paddingVertical: 5,
paddingHorizontal: 8,
borderRadius: 4,
backgroundColor: '#3b5998',
},
text: {
marginLeft: 10,
color: 'white',
fontWeight: '600',
},
});
class nomsyapp extends React.Component {
constructor(props) {
super(props);
this.state = {
result: 'Find the Foods that Fit Your Lifestyle',
loggedIn: false,
};
}
login() {
FacebookLoginManager.newSession((error, info) => {
if (error) {
this.setState({result: error});
} else {
this.setState({result: info});
this.setState({loggedIn: true});
this.props.navigator.push({
component: Main,
title: 'Choose Your Lifestyle',
});
}
});
}
render() {
return (
<View style={styles.container}>
<TouchableHighlight onPress={this.login.bind(this)}>
<Icon name="facebook" style={styles.icon}>
<Text style={styles.text}>Login with Facebook</Text>
</Icon>
</TouchableHighlight>
<Text style={styles.instructions}>
{this.state.result}
</Text>
</View>
);
}
};
AppRegistry.registerComponent('nomsyapp', () => nomsyapp);
============================
This is the format you need for your initial route:
render: function() {
return (
<NavigatorIOS
initialRoute={{
component: nomsyapp,
title: 'Nomsyapp',
passProps: { /*whatever props you want */ },
}}
/>
);
}
This example is based off of the Facebook docs.
Thus, you should move all of your current code into another component and create a new component with the render function displayed above. Then the nomsyapp
component will have the navigator
property and you'll be able to navigate routes.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With