使用react-navigation的SwitchNavigator,包括登录页面和一个抽屉导航,session过期后使用this.props.navigation.navigate('login')跳转至登录页面重新登录,登录成功但没有跳转。
import React, { Component } from 'react';
import {
AppRegistry,
Text,
View,
Button,
StyleSheet,
Image,
} from 'react-native';
import { createDrawerNavigator,SwitchNavigator } from 'react-navigation';
import { CurrentTaskRoot } from '../page/currentTask/CurrentTaskRoot';
import { ApplyRoot } from '../page/apply/ApplyRoot';
import { ApprovalRoot } from '../page/approval/ApprovalRoot';
import { TaskSchedulingRoot } from '../page/taskScheduling/TaskSchedulingRoot';
import { RefuelRecordRoot } from '../page/refuelRecord/RefuelRecordRoot';
import { HandoverCarRoot } from '../page/handoverCar/HandoverCarRoot';
import { AddressBookRoot } from '../page/addressBook/AddressBookRoot';
import { SettingRoot } from '../page/setting/SettingRoot';
import Login from '../page/Login';
const DrawerNav = createDrawerNavigator({
CurrentTaskRoot: {
screen: CurrentTaskRoot,
navigationOptions: {
drawerLabel: '当前任务'
}
},
ApplyRoot: {
screen: ApplyRoot,
navigationOptions: {
drawerLabel: '我的申请'
}
},
ApprovalRoot: {
screen: ApprovalRoot,
navigationOptions: {
drawerLabel: '我的审核'
}
},
TaskSchedulingRoot: {
screen: TaskSchedulingRoot,
navigationOptions: {
drawerLabel: '任务调度'
}
},
RefuelRecordRoot: {
screen: RefuelRecordRoot,
navigationOptions: {
drawerLabel: '加油记录'
}
},
HandoverCarRoot: {
screen: HandoverCarRoot,
navigationOptions: {
drawerLabel: '交接车'
}
},
AddressBookRoot: {
screen: AddressBookRoot,
navigationOptions: {
drawerLabel: '通讯录'
}
},
SettingRoot: {
screen: SettingRoot,
navigationOptions: {
drawerLabel: '设置'
}
}
}, {
drawerWidth: 150, // 抽屉宽
drawerPosition: 'left', // 抽屉在左边还是右边
initialRouteName: 'HandoverCarRoot', // 默认页面组件
contentOptions: {
activeTintColor: '#028ce5', // 选中文字颜色
activeBackgroundColor: '#fff', // 选中背景颜色
inactiveTintColor: '#000', // 未选中文字颜色
inactiveBackgroundColor: '#fff', // 未选中背景颜色
}
});
export const Navigator = SwitchNavigator({
Login: Login,
Draw: DrawerNav
},
{
initialRouteName: 'Login',
});
//获取所有加油记录
getList(){
if(this.state.recordCount > 0) {
this.setState({
"type": 2
})
}
let fd = new FormData();
fd.append('session',this.state.session);
fd.append('carId',this.state.carId);
fd.append('type',this.state.type.toString());
fd.append('updateTime',this.state.updateTime.toString());
fd.append('recordCount',this.state.recordCount);
HttpUtil.post('/carManage/phone/carOils/findAllCarOils',fd)
.then(result=>{
if(result.code == 1) {
let d = JSON.parse(result.content);
if(d.length>0) {
this.setState({
data: d,
recordCount : this.state.recordCount+d.length,
isRefresh: false,
showFoot:0
})
}else{
this.setState({
isRefresh:false,
showFoot:1
})
}
}else if(result.code == 2) {
this.setState({isRefresh:false,showFoot:0});
Alert.alert('提示',result.content)
}else if(result.code == 3) {
this.setState({isRefresh:false,showFoot:0});
Alert.alert('提示',result.content);
this.props.navigation.navigate('Login');//session过期重新登录
} else {
this.setState({isRefresh:false,showFoot:0})
Alert.alert('提示',result.content)
}
})
}
HttpUtil.post('/carManage/phone/login/checkLogin',fd)
// .then(()=>Toast.loading('Loading...',0))
.then(result=>{
if(result.code == 1){
Toast.success('登录成功!', 1);
let d = JSON.parse(result.content);
storage.save({
key: 'session',
data: d.session
});
storage.save({
key: 'userName',
data: this.state.userName
});
storage.save({
key: 'imgUrl',
data: {
meetImage:d.meetImage,
returnImage:d.returnImage,
oilsImage:d.oilsImage,
applyCarImage:d.applyCarImage
}
});
this.props.navigation.navigate('Draw');
}else if(result.code == 2){
Toast.info(result.content,2);
}else if(result.code == 3){
Toast.fail(result.content,2);
}else if(result.code == 4){
Toast.fail(result.content,2);
}
})
.catch(error=>{
this.setState({
result: JSON.stringify(error)
})
})
路由如下:
export const Navigator = SwitchNavigator({
},
{
});
登录验证成功的跳转:this.props.navigation.navigate('Draw');
令牌过期的跳转:this.props.navigation.navigate('Login');
这个跳转本身是没有问题的,之所以跳转失败原因可能是由于在其他子路由里也创建了一个Login的路由,导致堆栈中的Login被替换。