React Native, NavigatorIOS, undefined 不是一个对象 (evaluating 'this.props.navigator.push')
React Native, NavigatorIOS, undefined is not an object (evaluating 'this.props.navigator.push')
我正在尝试使用 NavigatorIOS
所以在我的 index.ios.js
中我得到:
'use strict';
var React = require('react-native');
var Home = require('./App/Components/Home');
var {
AppRegistry,
StyleSheet,
NavigatorIOS
} = React;
var styles = StyleSheet.create({
container:{
flex: 1,
backgroundColor: '#111111'
}
});
class ExampleApp extends React.Component{
render() {
return (
<NavigatorIOS
style={styles.container}
initialRoute={{
title: 'example',
component: Home
}} />
);
}
};
AppRegistry.registerComponent('exampleapp', () => ExampleApp);
module.exports = ExampleApp;
然后在Home.js
:
'use strict';
var React = require('react-native');
var Park = require('./Park');
var {
View,
StyleSheet,
Text,
TouchableHighlight
} = React;
var styles = StyleSheet.create({
...
});
class Home extends React.Component{
onPress() {
this.props.navigator.push({
title: 'Routed!',
component: Park
});
}
render() {
return (
<View style={styles.mainContainer}>
<Text> Testing React Native </Text>
<TouchableHighlight onPress={this.onPress} style={styles.button}>
<Text>Welcome to the NavigatorIOS . Press here!</Text>
</TouchableHighlight>
</View>
);
}
};
module.exports = Home;
我遇到的问题是,当我点击 TouchableHighlight
触发 onPress()
时,出现错误:
"Error: undefined is not an object (evaluating 'this.props.navigator')
所以它似乎无法从 props 中找到 navigator
但导航器应该由 NavigatorIOS
?
传递
此外,Home
组件似乎有 this.props.navigator
,如图所示:
有什么提示吗?
我找到了几个链接(人们遇到了完全相同的问题但没有帮助):
由于您使用的是 ES6,因此您需要绑定 'this'。
例如:onPress={this.onPress.bind(this)}
编辑:我最近使用的另一种方法是在函数本身上使用箭头函数,因为它们会自动绑定外部 this
。
onPress = () => {
this.props.navigator.push({
title: 'Routed!',
component: Park
});
};
您可以在 constructor
中将函数绑定到此。
constructor(props) {
super(props);
this.onPress = this.onPress.bind(this);
}
然后在没有绑定的情况下渲染时使用它。
render() {
return (
<TouchableHighlight onPress={this.onPress} style={styles.button}>
<Text>Welcome to the NavigatorIOS. Press here!</Text>
</TouchableHighlight>
);
}
这样做的好处是可以多次使用,还可以清理您的渲染方法。
我正在尝试使用 NavigatorIOS
所以在我的 index.ios.js
中我得到:
'use strict';
var React = require('react-native');
var Home = require('./App/Components/Home');
var {
AppRegistry,
StyleSheet,
NavigatorIOS
} = React;
var styles = StyleSheet.create({
container:{
flex: 1,
backgroundColor: '#111111'
}
});
class ExampleApp extends React.Component{
render() {
return (
<NavigatorIOS
style={styles.container}
initialRoute={{
title: 'example',
component: Home
}} />
);
}
};
AppRegistry.registerComponent('exampleapp', () => ExampleApp);
module.exports = ExampleApp;
然后在Home.js
:
'use strict';
var React = require('react-native');
var Park = require('./Park');
var {
View,
StyleSheet,
Text,
TouchableHighlight
} = React;
var styles = StyleSheet.create({
...
});
class Home extends React.Component{
onPress() {
this.props.navigator.push({
title: 'Routed!',
component: Park
});
}
render() {
return (
<View style={styles.mainContainer}>
<Text> Testing React Native </Text>
<TouchableHighlight onPress={this.onPress} style={styles.button}>
<Text>Welcome to the NavigatorIOS . Press here!</Text>
</TouchableHighlight>
</View>
);
}
};
module.exports = Home;
我遇到的问题是,当我点击 TouchableHighlight
触发 onPress()
时,出现错误:
"Error: undefined is not an object (evaluating 'this.props.navigator')
所以它似乎无法从 props 中找到 navigator
但导航器应该由 NavigatorIOS
?
此外,Home
组件似乎有 this.props.navigator
,如图所示:
有什么提示吗?
我找到了几个链接(人们遇到了完全相同的问题但没有帮助):
由于您使用的是 ES6,因此您需要绑定 'this'。
例如:onPress={this.onPress.bind(this)}
编辑:我最近使用的另一种方法是在函数本身上使用箭头函数,因为它们会自动绑定外部 this
。
onPress = () => {
this.props.navigator.push({
title: 'Routed!',
component: Park
});
};
您可以在 constructor
中将函数绑定到此。
constructor(props) {
super(props);
this.onPress = this.onPress.bind(this);
}
然后在没有绑定的情况下渲染时使用它。
render() {
return (
<TouchableHighlight onPress={this.onPress} style={styles.button}>
<Text>Welcome to the NavigatorIOS. Press here!</Text>
</TouchableHighlight>
);
}
这样做的好处是可以多次使用,还可以清理您的渲染方法。