React Native Stack 导航“主屏幕不存在”

问题描述 投票:0回答:0

我正在使用 Firebase 身份验证对存储用户做出原生反应。当我登录或注册时,我收到一条错误消息,询问我是否有一个名为“HomeScreen”的屏幕,如最后一个代码块所示。我相信我的“用户?”第一个代码块中的行每次都返回 null,因此不会点击 hte 主屏幕。有人知道解决方案吗?

提前致谢。

App.js


export default function App() {

  const [loading, setLoading] = useState(true)
  const [user, setUser] = useState(null)

  return (
    <NavigationContainer>
      <Stack.Navigator>
        { user ? (
          <Stack.Screen name="HomeScreen" component={HomeScreen} >
            {(props) => <HomeScreen {...props} extraData={user} />}
          </Stack.Screen>
        ) : (
          <>
            <Stack.Screen name="Login" component={LoginScreen} />
            <Stack.Screen name="Registration" component={RegistrationScreen} />
          </>
        )}
      </Stack.Navigator>
    </NavigationContainer>
  );
}

LoginScreen.js

const onLoginPress = () => {
    firebase
      .auth()
      .signInWithEmailAndPassword(email, password)
      .then((response) => {
        const uid = response.user.uid
        const usersRef = firebase.firestore().collection('users')
        usersRef
          .doc(uid)
          .get()
          .then((firestoreDocument) => {
            if (!firestoreDocument.exists) {
              alert('User does not exist anymore.')
              return
            }
            const user = firestoreDocument.data()
            navigation.navigate('HomeScreen', { user })
          })
          .catch((error) => {
            alert(error)
          })
      })
      .catch((error) => {
        alert(error)
      })
  }

RegistrationScreen.js

  const onRegisterPress = () => {
    if (password !== confirmPassword) {
      alert("Passwords don't match.")
      return
    }
    firebase
      .auth()
      .createUserWithEmailAndPassword(email, password)
      .then((response) => {
        const uid = response.user.uid
        const data = {
          id: uid,
          email,
          fullName,
        }
        const usersRef = firebase.firestore().collection('users')
        usersRef
          .doc(uid)
          .set(data)
          .then(() => {
            navigation.navigate('HomeScreen', { user: data })
          })
          .catch((error) => {
            alert(error)
          })
      })
      .catch((error) => {
        alert(error)
      })
  }

HomeScreen.js

export default function HomeScreen(props) {
    return (
        <View>
            <Text>Home Screen</Text>
        </View>
    )
}```





# **The Error**

带有负载 {"name":"HomeScreen","params":{"user":{"email":"[email protected]","id":"GTyOXdSOglhpAlthv6yGn0KeMgq1","fullName" :"altaaf jahankeer "}}} 没有被任何导航器处理。

你有一个名为“HomeScreen”的屏幕吗?

如果您尝试导航到嵌套导航器中的屏幕,请参阅https://reactnavigation.org/docs/nesting-navigators#navigating-to-a-screen-in-a-nested-navigator

在 node_modules@react-navigatio

javascript firebase react-native firebase-authentication react-native-navigation
© www.soinside.com 2019 - 2024. All rights reserved.