gpt4 book ai didi

react-native - react-navigation 3 在嵌套堆栈中重置

转载 作者:行者123 更新时间:2023-12-04 15:38:51 25 4
gpt4 key购买 nike

我试图了解如何在嵌套堆栈中重置
这是我的代码

    const AuthStack = createStackNavigator(
{
Welcome,
Login,
Register,
ConfirmationCode,
},
{
initialRouteName: 'Welcome',
headerMode: 'none',
lazy: true,
transitionConfig,
defaultNavigationOptions: {
gesturesEnabled: false,
},
}
)

const AppStack = createStackNavigator(
{
TabStack,
SearchResult,
BusinessDetail,
BusinessMap,
MakeAppointment,
TermsAndConditions
},
{
initialRouteName: 'TabStack',
headerMode: 'none',
lazy: true,
transitionConfig,
defaultNavigationOptions: {
gesturesEnabled: false,
},
}
)

let MainStack = createSwitchNavigator(
{
AuthLoading,
Auth: AuthStack,
App: AppStack,
},
{
initialRouteName: 'AuthLoading',
headerMode: 'none',
lazy: true,

defaultNavigationOptions: {
gesturesEnabled: false,
},
}
)

选项卡堆栈
    import React from 'react';

import { createBottomTabNavigator, createAppContainer } from 'react-navigation';
import {
Search,
MyFavourites,
MyAppointments,
UserProfile
} from '../screens'
import Icon from 'react-native-vector-icons/Feather';
import Colors from '../utils/Colors'
let TabStack = createBottomTabNavigator(
{
Search,
MyFavourites,
MyAppointments,
UserProfile,
},
initialRouteName: 'ScreenTab1',
tabBarOptions: {
activeTintColor: Colors.pink,
inactiveTintColor: Colors.black,
showLabel: false,
style: {
backgroundColor: 'white'
}
},
}
)
export default createAppContainer(TabStack);

我想了解如何进行重置,例如:
    reset from UserProfile to TabStack (in AppStack) to AuthStack

我试着这样做
const resetAction = StackActions.reset({
index: 0,
actions: [NavigationActions.navigate({ routeName: 'AuthStack' })],
});
this.props.navigation.dispatch(resetAction);

或者这样
const resetAction = StackActions.reset({
index: 0,
key: null,
actions: [NavigationActions.navigate({ routeName: 'AuthStack' })],
});
this.props.navigation.dispatch(resetAction);

但我得到了错误

there is no route defined for AuthStack



我在stackoverflow中检查了问题,但那里的答案对我不起作用,总是向我显示我上面写的相同错误。

最佳答案

您的 resetAction不成功,因为您在 TabStack 上发送它(因为您在 this.props.navigation.dispatch 上调用 UserProfile,如果我没听错的话)。您需要发送resetAction给您的MainStack反而。 This thread here提出了一些可以实现这一目标的方法。而且,这是我的首选解决方案,因为我不必在导航器周围传递 Prop 或调用多个嵌套操作。

  • 创建 navigationService.js具有以下内容(以保留您的顶级导航器作为引用)

  • import { NavigationActions, StackActions } from 'react-navigation';

    let _navigator;

    function setTopLevelNavigator(navigatorRef) {
    _navigator = navigatorRef;
    }

    function navigateMainNavigator(routeName, params) {
    _navigator.dispatch(
    NavigationActions.navigate({
    routeName,
    params,
    }),
    );
    }

    // add other navigation functions that you need and export them

    export default {
    setTopLevelNavigator,
    navigateMainNavigator,
    };
  • 在您的 App.js 上或您呈现的任何其他文件MainStack , 这样做设置引用

  • import NavigationService from './navigationService';

    ...

    render() {
    return (

    ...
    <MainStack
    ref={navigatorRef => {
    NavigationService.setTopLevelNavigator(navigatorRef);
    }}
    />
    ...

    )
    }
  • 无论何时何地你想重置到你的AuthStack (或您的 MainStack 中的任何其他堆栈),只需导入 NavigationService并调用

  • NavigationService.navigateAndReset('Auth', {...yourParamsIfAny});
    // 'Auth' because you named it that way in your 'MainStack'

    ==================================================== ==========================

    已编辑

    以前的解决方案,在 navigationService.js , 用于 StackNavigator作为 MainStack
    function navigateAndReset(routeName, params) {
    _navigator.dispatch(
    StackActions.reset({
    index: 0,
    actions: [
    NavigationActions.navigate({
    routeName,
    params,
    }),
    ],
    })
    );
    }

    关于react-native - react-navigation 3 在嵌套堆栈中重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54755122/

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