React Navigation - 基于 Routes.js 中的上下文值的条件渲染屏幕

Posted

技术标签:

【中文标题】React Navigation - 基于 Routes.js 中的上下文值的条件渲染屏幕【英文标题】:React Navigation - Conditional rendering screen based on Context value in Routes.js 【发布时间】:2020-06-28 08:30:37 【问题描述】:

我在 RNavigation 中遇到了条件渲染的问题,

假设我有 3 个选项卡(主页、上传、个人资料)。

我需要处理Upload screen,如果用户已经登录,

实际上我已经创建了自己的上下文包含isLoggedin,但我不知道如何在Routes.js 中使用它

const TabNavigator = createMaterialTopTabNavigator(
  Home: screen:Home ,
  Upload: screen:Upload , // here i need to handle if user not logged in yet i want to use screen:PleaseLogin
  //Upload:this.context.User.isLoggedin ? screen:Upload : screen:PleaseLogin
  Profile: screen:Profile ,
)

我认为这种情况与使用 createSwitchNavigator 的 Auth Flow 不同

我怎样才能实现它?

编辑:

我不知道如何在Routes.js 中添加this.context,因为Routes.js 不是react component

【问题讨论】:

是否需要使用context-api?您也可以为此使用 AsyncStorage。 @AnusKaleem 我认为是的,我页面的所有内容都取决于登录状态,因为我的应用程序不会强制用户在查找内容之前登录/注册 也可以通过异步存储进行管理。只需在成功登录尝试时将 isloggedin 密钥设置为 true 并从应用程序中的任何位置访问该密钥。 AsyncStorage 与 android 中的 SharedPreferences 相同 【参考方案1】:

你可以试试这个

Upload: screen:this.context.User.isLoggedin ? Upload : PleaseLogin  ,

【讨论】:

我不知道如何在Routes.js 中添加this.context,因为Routes.js 不是反应组件 抱歉,回复晚了,正如@Asad 所提到的,您可以将isLoggedin 设置为反应component 中的全局变量,然后您可以在任何地方使用它。【参考方案2】:

您可以在 this.context.User.isLoggedin 将要设置的位置添加一个全局变量

global.isLoggedin = this.context.User.isLoggedin;

那么

Upload: global.isLoggedin ? Upload : PleaseLogin  ,

【讨论】:

以上是关于React Navigation - 基于 Routes.js 中的上下文值的条件渲染屏幕的主要内容,如果未能解决你的问题,请参考以下文章

React Navigation - 基于 Routes.js 中的上下文值的条件渲染屏幕

React Navigation-Introduction (简介)

react-navigation子组件数据到父组件函数[react-navigation 6]

React Navigation 与 React Native Navigation [关闭]

我需要下载 react-navigation 并使用命令 npm i @react-navigation/native 并显示错误

React Navigation基本用法