gpt4 book ai didi

javascript - 为什么在 react-native 中使用 this.props.navigator.replace 再次渲染同一个场景?

转载 作者:行者123 更新时间:2023-11-29 01:28:59 25 4
gpt4 key购买 nike

我正在玩 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);

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({ ... });

最佳答案

问题是您的 renderScene 方法需要知道要渲染哪个组件,但您始终向其发送 LoginScreen 组件。做这样的事情:

renderScene: (route, navigator) {
Component = route.component
<Component navigator={navigator} route={route} />
}

这意味着您可以通过将组件键传递给导航器来移动到新场景。

this.props.navigator.replace({
component: MainScreen
});

关于javascript - 为什么在 react-native 中使用 this.props.navigator.replace 再次渲染同一个场景?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33673490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com