0
我正在和react-native以及navigator
組件一起玩。我有一個簡單的登錄場景,在按下按鈕後,我想重定向到另一個頁面。爲什麼在react-native中使用this.props.navigator.replace再次渲染同一場景?
我不明白爲什麼當我按下按鈕時,我又得到了同樣的場景。我不再進入MainScreen,而是重新路由到LoginScreen。
index.ios.js
'use strict';
var React = require('react-native');
var {
AppRegistry,
StyleSheet,
Text,
View,
Navigator,
} = React;
var MainScreen = require('./MainScreen');
var LoginScreen = require('./LoginScreen');
var App = React.createClass({
render: function() {
return (
<Navigator
style={styles.navigationContainer}
initialRoute={{id: 'LoginScreen', name:'Login'}}
renderScene={(route, navigator) =><LoginScreen navigator={navigator}/>}
/>
);
}
});
var styles = StyleSheet.create({
navigationContainer: {
flex: 1
}
});
AppRegistry.registerComponent('App',() => App);
LoginScreen.js
'use strict';
var React = require('react-native');
var Dimensions = require('Dimensions');
var windowSize = Dimensions.get('window');
var {
AppRegistry,
StyleSheet,
View,
Text,
TextInput,
Image,
TouchableHighlight
} = React;
var MainScreen = require("./MainScreen");
var LoginScreen = React.createClass({
getInitialState: function() {
return {
username: '',
password: ''
}
},
goToMainScreen: function() {
this.props.navigator.replace({
id: MainScreen
});
},
render: function() {
return (
<View style={styles.container}>
<View style={styles.header}>
<Image style={styles.mark} source={{uri: ''}} />
</View>
<View style={styles.usernameAndPasswordContainer}>
<View style={styles.inputContainer}>
<TextInput
style={styles.input}
enablesReturnKeyAutomatically={true}
onEndEditing={event => this.setState({username: event.nativeEvent.text})}
placeholder="Username"
placeholderTextColor="#002A32"
/>
</View>
<View style={styles.inputContainer}>
<TextInput
password={true}
style={styles.input}
placeholder="Password"
placeholderTextColor="#002A32"
onEndEditing={event => this.setState({password: event.nativeEvent.text})}
/>
</View>
</View>
<TouchableHighlight
style={styles.signin}
onPress={this.goToMainScreen.bind(this)}
>
<Text>Sign in!</Text>
</TouchableHighlight>
</View>
);
}
});
var styles = StyleSheet.create({ ... });