React native React Native-向堆栈导航添加逻辑

React native React Native-向堆栈导航添加逻辑,react-native,react-navigation,React Native,React Navigation,我有以下堆栈导航: const WelcomeStack = createStackNavigator({ UpdateProfileScreen: { screen: UpdateProfileScreen, }, SelectProfileScreen: { screen: SelectProfileScreen, }, PresentationModal: { screen: PresentationM

我有以下堆栈导航:

const WelcomeStack = createStackNavigator({
    UpdateProfileScreen: {
        screen: UpdateProfileScreen,
    },
    SelectProfileScreen: {
        screen: SelectProfileScreen,
    },
    PresentationModal: {
        screen: PresentationModal,
    }
}, {
    initialRouteName: 'UpdateProfileScreen',
    headerMode: 'none'
})
当用户是新用户时,我首先显示“UpdateProfileScreen”,然后移动到“SelectProfileScreen”,然后是“PresentationModel”

如果由于某种原因,在“UpdateProfileScreen”之后用户关闭了应用程序,下次他们登录时,我将显示“SelectProfileSecreen”和“PresentationModel”。如果他们完成了数据,下一次,他们将只看到“PresentationModel”

因为我已经将“UpdateProfileScreen”设置为initialRoute,所以它总是首先加载,即使它没有显示

因此,我想知道是否可以通过编程更改初始路线和/或是否可以:

this.props.navigation.navigate("WelcomeStack")

我可以在同一堆栈中添加一些逻辑来处理要显示的页面?

我认为您最好的选择是使用
SwitchNavigator(RouteConfigs、SwitchNavigator或Config)
您可以使用
createSwitchNavigator
简单地创建它,因为它控制了大多数本地应用程序中主要用于身份验证流的导航器的所有切换

尽管如此,对于你的情况,我认为这是实现期望行为的最合适的方式

如果使用以下内容发布应用程序,请小心:

this.props.navigation.navigate("WelcomeStack") 
因为它可能是一个严重的安全漏洞

文件:


小吃示例:

我认为您最好的选择是使用
SwitchNavigator(RouteConfig、SwitchNavigator或Config)
您只需使用
createSwitchNavigator
创建它,因为它控制了大多数本机应用程序中主要用于身份验证流的导航器的所有切换

尽管如此,对于你的情况,我认为这是实现期望行为的最合适的方式

如果使用以下内容发布应用程序,请小心:

this.props.navigation.navigate("WelcomeStack") 
因为它可能是一个严重的安全漏洞

文件:


零食示例:

我在这里遇到了一个类似的问题,我是如何解决的: 添加了类似以下内容的
SwitchNavigator


让Navigation=createSwitchNavigator(
{
AuthLoading:AuthLoading,
LoginNavigator:LoginNavigator,
HomeNavTab:tabNavigator,
loggedinchoice:loggedinchoice
},
{
initialRouteName:“授权加载”
}
);
AuthLoading
堆栈是第一个加载的堆栈,并决定应用程序下一步的位置:

从“React”导入React;
从“react redux”导入{connect};
类AuthLoading扩展了React.Component{
建造师(道具){
超级(道具);
this.checkUserSession();
}
checkUserSession=()=>{
const userData=this.props.userData;
如果(用户数据){
const-ResidesNumber=userData.nbreResidences;
如果(派驻人数==1){
this.props.navigation.navigate(“HomeNavTab”);
}否则{
this.props.navigation.navigate(“loggedinselect”);
}
}否则{
这个.props.navigation.navigate(“LoginNavigator”);
}
};
//在此处呈现您喜欢的任何加载内容
render(){
返回(
无效的
);
}
}
常量mapStateToProps=状态=>{
返回{
userData:state.userData
};
};
导出默认连接(MapStateTops)(AuthLoading);

也许你会从中得到一个想法。

我在这里遇到了一个类似的问题,我是如何解决的: 添加了类似以下内容的
SwitchNavigator


让Navigation=createSwitchNavigator(
{
AuthLoading:AuthLoading,
LoginNavigator:LoginNavigator,
HomeNavTab:tabNavigator,
loggedinchoice:loggedinchoice
},
{
initialRouteName:“授权加载”
}
);
AuthLoading
堆栈是第一个加载的堆栈,并决定应用程序下一步的位置:

从“React”导入React;
从“react redux”导入{connect};
类AuthLoading扩展了React.Component{
建造师(道具){
超级(道具);
this.checkUserSession();
}
checkUserSession=()=>{
const userData=this.props.userData;
如果(用户数据){
const-ResidesNumber=userData.nbreResidences;
如果(派驻人数==1){
this.props.navigation.navigate(“HomeNavTab”);
}否则{
this.props.navigation.navigate(“loggedinselect”);
}
}否则{
这个.props.navigation.navigate(“LoginNavigator”);
}
};
//在此处呈现您喜欢的任何加载内容
render(){
返回(
无效的
);
}
}
常量mapStateToProps=状态=>{
返回{
userData:state.userData
};
};
导出默认连接(MapStateTops)(AuthLoading);

也许你会从中得到一个想法。

看起来你会使用
createSwitchNavigator
:@B.Mohammad是的,我正在使用createSwitchNavigator,因为我有其他堆栈,但我如何将其应用于此案例?只需探索react导航库,你会发现所有这些,然后开始使用react navigation 5.0。您可以设置一个组件,在其中检查逻辑,然后重定向到相应的屏幕。看起来您将使用
createSwitchNavigator
:@B.Mohammad是的,我正在使用createSwitchNavigator,因为我有其他堆栈,但如何将其应用于此情况?只需探索react navigation库,您将在那里找到所有内容,并开始使用react navigation 5.0。您可以设置一个组件,在其中检查您的逻辑,然后重定向到相应的屏幕。谢谢您的回答。我正在使用SwitchNavigator,因为我有其他堆栈,但不确定如何在这种情况下使用它。另外,你能给我解释更多关于安全漏洞的信息吗?因为它是一个简单的布尔变量,任何拥有Apk提取器和JAVA de编译器的人都可以访问它。你退房了吗?如果你以后还想让我发布一个小程序,我会的。谢谢,我会详细查看代码。但是如果有人对应用程序进行反编译,我使用的任何方法都会不一样吗?首先,使用switch navigator将使一个堆栈几乎不可能看到另一个堆栈,从而提高安全性。但我个人的观点是,那些开发react native的人所做的了不起的工作使sur