鍍金池/ 問答/HTML5  HTML/ 使用react-navigation的SwitchNavigator,sessi

使用react-navigation的SwitchNavigator,session過期后重新登錄無法跳轉(zhuǎn)

使用react-navigation的SwitchNavigator,包括登錄頁面和一個(gè)抽屜導(dǎo)航,session過期后使用this.props.navigation.navigate('login')跳轉(zhuǎn)至登錄頁面重新登錄,登錄成功但沒有跳轉(zhuǎn)。

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: '當(dāng)前任務(wù)'
        }
    },
    ApplyRoot: {
        screen: ApplyRoot,
        navigationOptions: {
            drawerLabel: '我的申請'
        }
    },
    ApprovalRoot: {
        screen: ApprovalRoot,
         navigationOptions: {
             drawerLabel: '我的審核'
         }
    },
    TaskSchedulingRoot: {
        screen: TaskSchedulingRoot,
        navigationOptions: {
            drawerLabel: '任務(wù)調(diào)度'
        }
    },
    RefuelRecordRoot: {
        screen: RefuelRecordRoot,
        navigationOptions: {
            drawerLabel: '加油記錄'
        }
    },
    HandoverCarRoot: {
        screen: HandoverCarRoot,
        navigationOptions: {
            drawerLabel: '交接車'
        }
    },
    AddressBookRoot: {
        screen: AddressBookRoot,
        navigationOptions: {
            drawerLabel: '通訊錄'
        }
    },
    SettingRoot: {
        screen: SettingRoot,
        navigationOptions: {
            drawerLabel: '設(shè)置'
        }
    }
}, {
    drawerWidth: 150, // 抽屜寬
    drawerPosition: 'left', // 抽屜在左邊還是右邊
    initialRouteName: 'HandoverCarRoot', // 默認(rèn)頁面組件
    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({

Login: Login,
Draw: DrawerNav

},
{

initialRouteName: 'Login',

});
登錄驗(yàn)證成功的跳轉(zhuǎn):this.props.navigation.navigate('Draw');
令牌過期的跳轉(zhuǎn):this.props.navigation.navigate('Login');
這個(gè)跳轉(zhuǎn)本身是沒有問題的,之所以跳轉(zhuǎn)失敗原因可能是由于在其他子路由里也創(chuàng)建了一個(gè)Login的路由,導(dǎo)致堆棧中的Login被替換。

2017年1月20日 10:40