Javascript 在所有屏幕中反应本机传递数据

Javascript 在所有屏幕中反应本机传递数据,javascript,firebase,react-native,firebase-authentication,Javascript,Firebase,React Native,Firebase Authentication,我希望能够访问所有屏幕中的对象。我通过firebase返回的用户对象。我从方法onAuthStateChanged中获得obejct。如何在app.js中获取用户并在所有屏幕中访问它 这是根应用程序中的代码: import React, { useEffect, useState } from 'react'; import { SafeAreaView, View, ActivityIndicator } from 'react-native'; import { createDrawerNa

我希望能够访问所有屏幕中的对象。我通过firebase返回的用户对象。我从方法onAuthStateChanged中获得obejct。如何在app.js中获取用户并在所有屏幕中访问它

这是根应用程序中的代码:

import React, { useEffect, useState } from 'react';
import { SafeAreaView, View, ActivityIndicator } from 'react-native';
import { createDrawerNavigator } from '@react-navigation/drawer';
import { NavigationContainer } from '@react-navigation/native';
import AsyncStorage from '@react-native-community/async-storage';

import { globalStyles, styles } from './styles/global';
import BottomTabScreen, { RootStackScreen } from './navigation/Index';
import DrawerContent from './navigation/DrawerContent';

import { on_auth_state_changed } from './firebase/Api';

const Drawer = createDrawerNavigator();

export default function App() {

  const [authState, setAuthState] = useState({
    isAuthenticated: false,
    isAuthenticationReady: false,
    isLoadingComplete: false,
  });

  useEffect(() => {
    on_auth_state_changed(authStateChanged);
  }, [])

  function authStateChanged(user) {
    setAuthState({
      ...authState,
      isAuthenticated: !!user,
      isAuthenticationReady: true,
      isLoadingComplete: true,
    })
  }

  if (!authState.isLoadingComplete) {
    return (
      <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center', backgroundColor: '#80c904' }}>
        <ActivityIndicator size="large" />
      </View>
    );
  }

  return (
    <SafeAreaView style={globalStyles.container}>
      <NavigationContainer>
        {(authState.isAuthenticated) ?
          <Drawer.Navigator drawerContent={props => <DrawerContent {...props} />}>
            <Drawer.Screen name="HomeDrawer" component={BottomTabScreen} />
          </Drawer.Navigator>
          :
          <RootStackScreen />
        }
      </NavigationContainer>
    </SafeAreaView>
  );
}

import React,{useffect,useState}来自“React”;
从“react native”导入{SafeAreaView,View,ActivityIndicator};
从'@react导航/drawer'导入{createDrawerNavigator};
从'@react-navigation/native'导入{NavigationContainer};
从“@react native community/async storage”导入异步存储;
从“./styles/global”导入{globalStyles,styles};
从“./navigation/Index”导入BottomTabScreen,{RootStackScreen};
从“./navigation/DrawerContent”导入抽屉内容;
从“./firebase/Api”导入{on_auth_state_changed};
const Drawer=createDrawerNavigator();
导出默认函数App(){
常量[authState,setAuthState]=useState({
I认证:错误,
isAuthenticationReady:false,
isLoadingComplete:false,
});
useffect(()=>{
on_auth_state_changed(authStateChanged);
}, [])
函数authStateChanged(用户){
setAuthState({
…国家,
已验证:!!用户,
isAuthenticationReady:正确,
isLoadingComplete:正确,
})
}
如果(!authState.isLoadingComplete){
返回(
);
}
返回(
{(authState.isAuthenticated)?
}>
:
}
);
}

您可以使用。还有其他选项,如Redux或任何状态管理库,但对于您的需要,上下文API已经足够了