【发布时间】:2019-11-03 23:55:55
【问题描述】:
在我的应用中,我有登录屏幕、忘记密码屏幕和注册屏幕。在注册屏幕中,我使用react-native-swiper 显示注册过程的三个步骤幻灯片。我在 StackNavigator 中封装了这些屏幕,并将这个 StackNavigator 渲染为我的 App.js 中的根组件。
这是我的 StackNavigator:
Router.js
import { createDrawerNavigator, createAppContainer, createStackNavigator } from 'react-navigation';
import Login from './src/containers/Login';
import SignUp from './src/containers/SignUp';
import ForgotPassword from './src/containers/ForgotPassword';
const AuthStackNavigator = createStackNavigator({
Login: {
screen: Login
},
ForgotPassword: {
screen: ForgotPassword
},
SignUp: {
screen: SignUp
},
});
const Router = createAppContainer(AuthStackNavigator)
export default Router
App.js
import React, { Component } from 'react';
import { Provider } from 'react-redux';
import configureStore from './src/store/configureStore';
import Router from './Router';
const store = configureStore()
class App extends Component {
render() {
return (
<Provider store={store}>
<Router />
</Provider>
);
}
}
export default App
SignUp.js
import React, { Component } from 'react';
import { View, StyleSheet, TouchableOpacity, KeyboardAvoidingView, Platform, Dimensions } from 'react-native';
import Swiper from 'react-native-swiper';
import Colors from '../../config/Colors';
import Logo from '../components/Logo';
import MText from '../components/MText';
import StepButton from '../components/StepButton';
import SignUpStepOne from './SignUpStepOne';
import SignUpStepTwo from './SignUpStepTwo';
import SignUpStepThree from './SignUpStepThree';
class SignUp extends Component {
static navigationOptions = ({navigation}) => ({
header: null
});
constructor(props) {
super(props);
this.state = {
activeStep: 0
};
}
slideToNext = () => {
this.swiper.scrollBy(1, true);
this.setState(prevState => ({
activeStep: prevState.activeStep + 1
}))
}
slideToPrev = () => {
this.setState(prevState => ({
activeStep: prevState.activeStep - 1
}), () => {
this.swiper.scrollBy(-1, true);
})
}
render() {
<KeyboardAvoidingView style={styles.container} behavior="padding">
<View style={{ flex: 1, paddingHorizontal: 10 }}>
<Logo />
<Swiper
style={{
}}
ref={(swiper) => { this.swiper = swiper; }}
containerStyle={{ flex: 1 }}
showsButtons={false}
showsPagination={false}
loop={false}
scrollEnabled={false}
onIndexChanged={(activeStep) => {
this.setState({
activeStep
})
}}
>
<SignUpStepOne onNext={this.slideToNext} />
<SignUpStepTwo onNext={this.slideToNext} onPrev={this.slideToPrev} />
<SignUpStepThree onNext={this.slideToNext} onPrev={this.slideToPrev} />
</Swiper>
</View>
</KeyboardAvoidingView>
}
}
但是,问题是当我使用 this.props.navigation.navigate('SignUp') 从 登录屏幕 导航到 注册屏幕 时,Swiper 组件在注册屏幕。它只是空白。安卓可以正常运行,IOS不行。
另外需要注意的是,如果我只是在 App.js 中将注册屏幕呈现为根,那么它可以正常工作。
如果我在 StackNavigator 中将 SignUp 屏幕设置为初始屏幕,那么它也可以正常工作。
请任何人帮助我这里出了什么问题?
【问题讨论】:
-
你可以尝试更改
this.props.navigation.navigate('SignUp')=>this.props.navigation.push('SignUp') -
感谢@hongdevelop 的评论,但是没用。
-
我可以看看你的注册页面吗?
-
我对 Redux 了解不多,但我认为是 Redux 出了问题。
-
它只是由
TextInput和下一个,上一个按钮组成。
标签: reactjs react-native react-native-navigation stack-navigator react-native-swiper