用户登录后,使用我的个人资料选项卡动态更改登录选项卡

Posted

技术标签:

【中文标题】用户登录后,使用我的个人资料选项卡动态更改登录选项卡【英文标题】:Dynamically change Login Tab with My Profile tab after the user has logged in 【发布时间】:2019-08-04 22:49:07 【问题描述】:

在应用启动时,会显示“登录”底部标签。我想要实现的是在用户登录应用程序后将显示的“登录”选项卡更改为“我的个人资料”选项卡。

我使用 Redux 来存储应用程序的登录状态,并且我设法获取了状态,但我不知道如何使用它来动态更改选项卡。

这是声明的两个选项卡:

// MainTabNavigator.js

const LoginStack = createSwitchNavigator(
  Login: LoginScreen,
);

LoginStack.navigationOptions = 
  tabBarVisible: true,
  tabBarLabel: 'Login',
  tabBarIcon: ( focused ) => (
    <TabBarIcon
      focused=focused
      name=Platform.OS === 'ios' ? 'ios-link' : 'md-link'
    />
  ),


const MyProfileStack = createSwitchNavigator(
  MyProfile: HomeScreen,
);

MyProfileStack.navigationOptions = (navigation) => (
  tabBarVisible: true,
  tabBarLabel: 'My Profile',
  tabBarIcon: ( focused ) => (
    <TabBarIcon
      focused=focused
      name=Platform.OS === 'ios' ? 'ios-person' : 'md-person'
    />
  ),
)

export default createBottomTabNavigator( LoginStack )

我尝试创建另一个组件并连接它,然后将其导入选项卡页面文件,但我无法使用 IsLoggedIn() 的返回值。

// IfLoggedIn.js

function IsLoggedIn(props) 
  return props.loginState.isLoggedIn ? true : false


const mapStateToProps = ( loginState ) => (
  loginState
);

const mapDispatchToProps = (dispatch) => bindActionCreators(
  setLoginState
, dispatch);

export default connect(mapStateToProps,mapDispatchToProps)(IsLoggedIn)

我在想我可以像这样在标签页文件中使用它:

// MainTabNavigator.js

const InterChangeTab = IsLoggedIn ? MyProfileStack : LoginStack
export default createBottomTabNavigator( InterChangeTab )

但它不起作用,因为 IsLoggedIn 是一个组件而不是常规函数。

【问题讨论】:

将其设置为具有重新渲染的状态。 @SnehaBharti 我认为我们在使用状态时遇到了同样的问题:github.com/react-navigation/react-navigation/issues/1171,你如何重新渲染反应导航? yes.. 构建 2 个功能.. 1 个用于登录前,一个用于登录后,并使用条件使它们工作 @SnehaBharti 对不起,我不明白,我应该在哪里创建这 2 个函数? 【参考方案1】:

为什么不直接在您的IfLoggedIn 上返回您的LoginStackMyProfileStack

function IsLoggedIn(props) 
  return (props.loginState.isLoggedIn ? <MyProfileStack /> : <LoginStack />)

实际上,IMO,我更喜欢使用另一个 switchNavigator 在登录屏幕和我的内容屏幕之间切换,结帐this react navigation docs on authentication flow

【讨论】:

我试过了,但它说:'此导航器缺少导航道具。在 react-navigation 3 中你必须直接设置你的应用容器' 你有use createAppContainer on your root navigator吗? 我相信您正在尝试文档中的身份验证流程?您能否分享您拥有的整个导航器堆栈,以及您尝试从哪里调用 navigation 属性? 嘿,我刚刚浏览了你的代码。我有 1 条建议,您可以完全摆脱您的 IfLoggedIn.js,并在 MainTabNavigator 上包含您的登录名和个人资料堆栈。 要导航,您可以在login 屏幕的componentDidUpdate 上检查您的状态,然后在navigate to profile 上检查您的状态,或者(IMO 更好)dispatch an navigate action 在您检查的redux 操作中并确认登录成功。

以上是关于用户登录后,使用我的个人资料选项卡动态更改登录选项卡的主要内容,如果未能解决你的问题,请参考以下文章

如何根据登录成功在新窗口/选项卡或同一窗口/选项卡中打开页面?

ejabberd:登录后无法查看“房间”选项卡

当用户已经登录另一个选项卡-iOS 时选择选项卡栏时导航另一个屏幕

页面刷新和多个选项卡上的 Vuex 状态

如何在模式中打开特定选项卡

如何隐藏离子4选项卡只是为登录页面