我是本机新手,我有一个个人项目,我正在尝试从Firestore云中获取数据,但是在屏幕更改时我总是收到此错误。
当我注释掉数据库代码时,它工作正常,所以我想知道可能是什么原因。
我的代码

import React from "react";
import auth from "@react-native-firebase/auth";
import firestore from "@react-native-firebase/firestore";

const ProfileStackScreen = ({ navigation }) => {
  React.useEffect(() => {
    const usr = auth().currentUser;
    setuserData(prev => {
      return { ...prev, uid: usr.uid };
    });
  }, []);

  const userRef = firestore().collection("users");
  const snapshot = userRef
    .where("uid", "==", userData.uid)
    .onSnapshot()
    .then(console.log(uid))
    .catch(error => {
      Alert.alert(error.message);
    });

  const [userData, setuserData] = React.useState({
    uid: ""
    // other field go here
  });
  return (
    <View>
      <Text>{userData.uid}</Text>
    </View>
  );
};

export default ProfileStackScreen;

最佳答案

@Maheshvirus是正确的。但是我认为您尝试在userData.uid不为空时获取数据。
如果要寻找这种方式,请尝试这种方式。

import React from 'react';
import auth from '@react-native-firebase/auth';
import firestore from '@react-native-firebase/firestore';

const ProfileStackScreen = ({ navigation }) => {

  React.useEffect(() => {
    const usr = auth().currentUser;
    setuserData((prev)=> {
      return {...prev,uid: usr.uid};
    });
  }, []);

    React.useEffect(() => {
       if(userData.uid !== ''){
          getData()
       }
    }, [userData]);

    const getData = () => {
       firestore()
       .collection('users');
       .where('uid', '==', userData.uid)
       .onSnapshot()
       .then(() => {
         console.log(uid)
       })
       .catch((error)=> {
         Alert.alert(error.message);
       });
    }

  const [userData, setuserData] = React.useState({
    uid: '',
  // other field go here

    });
  return (
    <View>
          <Text>{userData.uid}</Text>
    </View>
  );
};

export default ProfileStackScreen;

07-24 21:36