仅当用户登录多次调用AppRegistry.registerComponent时才响应本机加载应用程序

时间:2016-11-27 14:58:22

标签: android ios facebook react-native

我有一个受用户保护的应用,我想在加载主应用之前验证用户。所以我想知道是否可以注册多个应用程序并在运行时间在它们之间切换?

例如,我可以拥有3个应用1.用于登录,2。用于管理员,3用于用户

我注册三个,然后根据条件运行其中一个,

AppRegistry.registerComponent('LoginApp',()=><LoginApp />);
AppRegistry.registerComponent('AdminApp',()=><AdminApp />);
AppRegistry.registerComponent('UserApp',()=><UserApp />);

我可以在https://facebook.github.io/react-native/docs/appregistry.html doc页面上看到许多看似有用的功能,但没有关于如何使用这些功能的文档:(

runApplication,unmountApplicationComponentAtRootTag似乎可以做我想做的但是如何实现呢?

2 个答案:

答案 0 :(得分:2)

您可以这样:

注册新组件:

AppRegistry.registerComponent(routeName, component);

通过标签卸载组件:

AppRegistry.unmountApplicationComponentAtRootTag(AppRegistry.getAppKeys()?.indexOf(routeName));

RootTag 是已注册的应用程序密钥的索引。


文档:

https://reactnative.dev/docs/appregistry.html#registercomponent

答案 1 :(得分:0)

我恐怕无法帮助你处理AppRegistry如何处理这个问题,但我认为这不是你想要实现的目标的正确方法。我建议改为在MainApp.js中设置条件,根据特定条件(您的州)呈现相应的“应用”。例如:

class MainApp extends Component {
  constructor(){
    this.state = {type: 'login'}; // Say your login component is the default one
  }
  render() {
    switch(this.state){
         case 'login': return <LoginApp onLoginSuccessful={type => this.setState({type})}/>
         case 'admin': return <AdminApp/>
         case 'user': return <UserApp/>
   }
  }
}

然后,您的index.(android|ios).js变得简单:

AppRegistry.registerComponent( 'MainApp',()=&GT);

您可以扩展此方法以从AsyncStorage或任何其他持久性实用程序中读取type值,以便永久存储该类型,并且您的用户无需再次登录,但我认为该示例涵盖了基础知识。