Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我对react导航身份验证流有问题_Javascript_React Native_Firebase Authentication_React Navigation - Fatal编程技术网

Javascript 我对react导航身份验证流有问题

Javascript 我对react导航身份验证流有问题,javascript,react-native,firebase-authentication,react-navigation,Javascript,React Native,Firebase Authentication,React Navigation,我有一个登录页面,如果没有登录它现在显示的问题是,当有一个令牌,它显示登录页面一秒钟,然后再进入主页,我如何才能阻止它这样做 我正在使用useLayoutEffect并尝试从friebase和asyncStorge中获取令牌,从而允许一个deley export default function Navigation() { const [userToken, setUserToken] = useState(null); // const Token = useSelector((st

我有一个登录页面,如果没有登录它现在显示的问题是,当有一个令牌,它显示登录页面一秒钟,然后再进入主页,我如何才能阻止它这样做

我正在使用useLayoutEffect并尝试从friebase和asyncStorge中获取令牌,从而允许一个deley

export default function Navigation() {
  const [userToken, setUserToken] = useState(null);
  // const Token = useSelector((store) => store.userState.userToken);
  const isDarkTheme = useSelector((store) => store.themeState.Theme);
  const dispatch = useDispatch();

  useLayoutEffect(() => {
    let mounted = true;
    firebase.auth().onAuthStateChanged((user) => {
      if (mounted) {
        if (user) {
          setUserToken(JSON.stringify(user.uid));
        } else {
          setUserToken(null);
        }
      }
    });
    dispatch(getTheme());
    // dispatch(getToken());
    return function cleanup() {
      mounted = false;
    };
  }, [userToken]);

  const theme = isDarkTheme ? CustumDarkTheme : CustumDefaultTheme;

  const Stack = createStackNavigator();
  return (
    <Provider theme={theme}>
      <NavigationContainer theme={theme}>
        {userToken ? (
          <Stack.Navigator screenOptions={{ headerTitle: (props) => <Header {...props} /> }}>
            <Stack.Screen name="Home" component={TabNavigation} />
            <Stack.Screen
              name="Profile"
              component={Profile}
              options={({}) => ({
                gestureEnabled: true,
                cardOverlayEnabled: true,
                ...TransitionPresets.ModalPresentationIOS,
                headerShown: false,
              })}
            />
            <Stack.Screen
              name="PatientDetails"
              component={PatientDetails}
              options={({}) => ({
                gestureEnabled: true,
                cardOverlayEnabled: true,
                ...TransitionPresets.ModalPresentationIOS,
                headerShown: false,
              })}
            />
          </Stack.Navigator>
        ) : (
          <Stack.Navigator initialRouteName="Start" screenOptions={{ headerShown: false }}>
            <Stack.Screen name="Start" component={Start} />
            <Stack.Screen name="LogIn" component={LogIn} />
            <Stack.Screen name="Register" component={Register} />
          </Stack.Navigator>
        )}
      </NavigationContainer>
    </Provider>
  );
}
导出默认函数导航(){
const[userToken,setUserToken]=useState(null);
//const-Token=useSelector((store)=>store.userState.userToken);
const isDarkTheme=useSelector((store)=>store.themstate.Theme);
const dispatch=usedpatch();
useLayoutEffect(()=>{
让我们假设这是真的;
firebase.auth().onAuthStateChanged((用户)=>{
如果(已安装){
如果(用户){
setUserToken(JSON.stringify(user.uid));
}否则{
setUserToken(null);
}
}
});
调度(getTheme());
//调度(getToken());
返回函数cleanup(){
安装=错误;
};
},[userToken]);
constTheme=isDarkTheme?CustumDarkTheme:custumdaultTheme;
const Stack=createStackNavigator();
返回(
{userToken(
}}>
({
已启用手势:true,
卡德:没错,
…TransitionPresets.ModalPresentationIOS,
校长:错,
})}
/>
({
已启用手势:true,
卡德:没错,
…TransitionPresets.ModalPresentationIOS,
校长:错,
})}
/>
) : (
)}
);
}

您可以添加加载状态并显示某些内容,直到获得令牌

const [loading, setLoading] = useEffect(true)

useEffect(()=>{if(userToken){setLoading(false)}},[userToken]

return (
    {loading?<LOADING INDICATION>:{userToken?ect}}
)
const[loading,setLoading]=useffect(true)
useffect(()=>{if(userToken){setLoading(false)}},[userToken]
返回(
{正在加载?:{userToken?ect}
)