为什么在react native中使用this.props.navigator.replace再次渲染同一场景
Why in react-native does the same scene gets render again using this.props.navigator.replace?
我使用的是react native,尤其是navigator
组件。我有一个简单的登录场景,按下按钮后,我想重定向到另一个页面。
我不明白为什么当我按下按钮时,我会再次渲染相同的场景。我没有转到主屏幕,而是再次转到登录屏幕。
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);
登录屏幕.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({ ... });
问题是您的renderScene
方法需要知道要渲染哪个组件,但您总是向它发送LoginScreen组件。这样做:
renderScene: (route, navigator) {
Component = route.component
<Component navigator={navigator} route={route} />
}
这意味着您可以通过将组件关键帧传递给导航器来移动到新场景。
this.props.navigator.replace({
component: MainScreen
});
相关文章:
- Windows8应用程序(html&Javascript):从图片库(除了文件选择器)显示图像的另一种方式
- Javascript返回值只在循环中返回一次
- 有没有一种方法可以添加相同的项目val=“0”;4〃;到JavaScript中数组的每个对象
- 有没有一种方法可以防止img get请求使用css或js发生
- Javascript,有没有一种方法可以将数组写成没有逗号或空格的单个文本字符串
- Jquery FadeIn FadeOut 只工作一次
- 如何获取不属于我项目的上一页的URL
- Javascript html每点击一次就会更改url
- 键入最后一位数字后自动提交
- 如何在chrome扩展中存储数据/结果,以及如何使用setTimeout使其只被调用一次
- fluxxor向一个flux实例添加一组以上的操作
- 如何在Facebook上的iframe应用程序中使后退按钮返回到上一页
- 在一场五人制的游戏中寻找邻居
- 雷格斯只参加了最后一场比赛
- 在另一场胜利中获取Titanium.App.Properties或使其在全球范围内可用
- Javascript:在正则表达式中反向引用而不记得上一场比赛
- 使用javascript replace()来匹配字符串的最后一次出现
- Javascript的replace()在每次出现时只替换一次
- 谷歌地图可以设置为慢速恒定平移吗?就像一场全球革命
- 淘汰赛每一场比赛都没有表现出任何东西