Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否有办法在react navigation(react native)中保存和恢复导航历史记录_Javascript_Reactjs_React Native_React Native Android_React Native Ios - Fatal编程技术网

Javascript 是否有办法在react navigation(react native)中保存和恢复导航历史记录

Javascript 是否有办法在react navigation(react native)中保存和恢复导航历史记录,javascript,reactjs,react-native,react-native-android,react-native-ios,Javascript,Reactjs,React Native,React Native Android,React Native Ios,我有一个StackNavigator(1),有5个屏幕。在第三个屏幕之后,我将导航到另一个StackNavigator(2)屏幕,在第二个StackNavigator(2)屏幕上执行一些操作之后,我需要返回Stack StackNavigator(1)第四个屏幕,并且应该能够使用navigation.goBack()返回StackNavigator(1)中的历史记录 我可以回到Stack StackNavigator(1)第4屏,但当我使用navigation.goBack()时,它不会转到St

我有一个StackNavigator(1),有5个屏幕。在第三个屏幕之后,我将导航到另一个StackNavigator(2)屏幕,在第二个StackNavigator(2)屏幕上执行一些操作之后,我需要返回Stack StackNavigator(1)第四个屏幕,并且应该能够使用navigation.goBack()返回StackNavigator(1)中的历史记录

我可以回到Stack StackNavigator(1)第4屏,但当我使用navigation.goBack()时,它不会转到StackNavigator(1)第3屏

我需要在StackNavigator(1)中保存和恢复导航历史记录

请让我知道有什么办法可以做到这一点


使用
StackNavigator.router.getStateForAction
操作路由状态

    //assume your StackNavigator1 just like below
    const StackNavigator1 = new StackNavigator({
        Screen1: {screen: Screen1},
        Screen2: {screen: Screen2},
        Screen3: {screen: Screen3},
        Screen4: {screen: Screen4},
        Screen5: {screen: Screen5}
    });

    const defaultGetStateForAction = StackNavigator1.router.getStateForAction;
    //store the state when navigate to screen3
    let state3;

    StackNavigator1.router.getStateForAction = (action, state) => {

        let newState = defaultGetStateForAction(action, state);
        //print out the state object
        console.log(`newState: ${newState}`);

        //change all the routeName 'Screen3', 'Screen4' to match your own project
        if (action.type === 'Navigation/NAVIGATE' && action.routeName === 'Screen3') {
            //store the state of screen3 for restore it later
            state3 = newState;
        }

        if (action.type === 'Navigation/NAVIGATE' && action.routeName === 'Screen4') {
            //check if screen3 exist in the state, change the condition for your own need
            let result = newState.routes.find((route) => {
                return route.routeName === 'Screen3'
            });
            //if 'screen3' doesn't exist, add it to the route manually
            if (result === undefined && state3 !== undefined) {
                let route4 = newState.routes[newState.index];
                let routes = state3.routes.slice();
                routes.push(route4);
                return {index: 3, routes}
            }
        }

        return defaultGetStateForAction(action, state)
    };

//... the rest code

嘿,Anish,我有类似的用例要实现。你能解决这个问题吗?你是如何解决这个问题的?