Javascript React native-函数CollectionReference.doc()需要其第一个参数
我有以下资料:Javascript React native-函数CollectionReference.doc()需要其第一个参数,javascript,firebase,react-native,google-cloud-firestore,Javascript,Firebase,React Native,Google Cloud Firestore,我有以下资料: function HomeScreen({navigation}) { const uid = firebase.auth().currentUser?.uid; const [user, setUser] = useState({}); useEffect(() => { const subscriber = firebase.firestore() .collection('users') .doc(uid) .onSna
function HomeScreen({navigation}) {
const uid = firebase.auth().currentUser?.uid;
const [user, setUser] = useState({});
useEffect(() => {
const subscriber = firebase.firestore()
.collection('users')
.doc(uid)
.onSnapshot(documentSnapshot => {
setUser(documentSnapshot.data());
});
return () => subscriber();
}, [uid]);
return (
<Screen style={styles.screen}>
<View>
<Text>Hello</Text>
<Text style={styles.nameText}>{user.username}</Text>
<Text>hello</Text>
<View style={{paddingBottom:20, marginRight:200, paddingTop:40}}>
<DefaultButton
title="Edit your profile"
onPress={() => navigation.navigate("EditProfileScreen")}
color='#F9CDAD'
/>
</View>
</View>
</Screen>
)
}
功能主屏幕({navigation}){
const uid=firebase.auth().currentUser?.uid;
const[user,setUser]=useState({});
useffect(()=>{
const subscriber=firebase.firestore()
.collection('用户')
.doc(uid)
.onSnapshot(文档快照=>{
setUser(documentSnapshot.data());
});
return()=>subscriber();
},[uid]);
返回(
你好
{user.username}
你好
导航。导航(“EditProfileScreen”)}
颜色=“#F9CDAD”
/>
)
}
我正在尝试显示用户名:
<Text style={styles.nameText}>{user.username}</Text>
{user.username}
但是我得到了以下错误:
FirebaseError:函数CollectionReference.doc()要求其第一个参数的类型为非空字符串,但它是:未定义
当我记录上面定义的
uid
时const uid=firebase.auth().currentUser?.uid
,它返回undefined
问题是,实际上,您在useffect()
部分中使用了引用uid
中的未定义的值
您已经正确地将其设置为依赖项数组中的依赖项,但是您没有检查该值是否已实际定义,以便以后安全使用
useEffect(() => {
// this will run two times, first when 'uid' is initialized (as undefined) -> which will give your error
// and then, when it gets defined with actual value.
// --> fix: check 'uid' to be defined before using it.
if(!uid) {
// uid not defined yet, just return.
return
}
// uid is defined here, it's safe to use.
const subscriber = firebase.firestore()
.collection('users')
.doc(uid)
.onSnapshot(documentSnapshot => {
setUser(documentSnapshot.data());
});
return () => subscriber();
}, [uid]);
问题在于,实际上,您在useffect()
部分中使用了引用uid
中的未定义的值
您已经正确地将其设置为依赖项数组中的依赖项,但是您没有检查该值是否已实际定义,以便以后安全使用
useEffect(() => {
// this will run two times, first when 'uid' is initialized (as undefined) -> which will give your error
// and then, when it gets defined with actual value.
// --> fix: check 'uid' to be defined before using it.
if(!uid) {
// uid not defined yet, just return.
return
}
// uid is defined here, it's safe to use.
const subscriber = firebase.firestore()
.collection('users')
.doc(uid)
.onSnapshot(documentSnapshot => {
setUser(documentSnapshot.data());
});
return () => subscriber();
}, [uid]);
在触发userEffect
时,似乎还没有设置uid
要解决此问题,请响应身份验证状态更改:
useEffect(() => {
let subscriber;
firebase.auth().onAuthStateChanged((user) => {
if (user && !subscriber) {
subscriber = firebase.firestore()
.collection('users')
.doc(user.uid)
.onSnapshot(documentSnapshot => {
setUser(documentSnapshot.data());
});
});
return () => subscriber();
}, [uid]);
您可能需要在最后调整返回
,因为订户
现在是异步设置的。您的用户效果
触发时,uid
似乎还没有设置
要解决此问题,请响应身份验证状态更改:
useEffect(() => {
let subscriber;
firebase.auth().onAuthStateChanged((user) => {
if (user && !subscriber) {
subscriber = firebase.firestore()
.collection('users')
.doc(user.uid)
.onSnapshot(documentSnapshot => {
setUser(documentSnapshot.data());
});
});
return () => subscriber();
}, [uid]);
您可能需要调整结尾处的返回
,因为订户
现在是异步设置的