当我登录时,我试图只获取已登录用户的消息,但我收到此错误,我不知道是什么问题。
我的代码:
const UserInbox = () => {
const [userData, setUserData] = useState([]);
const message = db.collection('feedback').where('recipient','==',userData.uid)
const[recipient,setRecipient]=useState("")
const[messageText,setMessageText]=useState("")
{/*fetch only logged in user messages from database*/}
const fetchData = async()=>{
try {
const list=[];
await message
// .orderBy('submitTime','desc')
.get()
.then((querySnapshot)=>{
querySnapshot.forEach((doc)=>{
const {userId,recipient,messageText,} = doc.data()
list.push({
id:doc.id,
userId,
recipient,
messageText
// sendTime,
})
})
})
setUserData(list)
if(loading){
setLoading(false)
}
} catch (error) {
}
}
useEffect(()=>{
fetchData()
},[])
function renderBody(){
return(
<ScrollView>
<FlatList
data={userData}
numColumns={1}
renderItem={({item})=>(
<>
<Swipeable
renderRightActions={()=>ListItemDelet(item.id)}>
<View>
<View>
<View style={{flexDirection:'row'}}>
<View>
<Text></Text>
<Text>{item.recipient}</Text>
</View>
<TouchableOpacity
onPress={()=>{
setRecipient(item.recipient),
setMessageText(item.messageText);
setModalVisible(true)}}>
<Text style={{
fontWeight:'600'
}}>View</Text>
</TouchableOpacity>
</View>
</View>
</View>
</Swipeable>
</>
)}
/>
<View style={{
position:'absolute',
top:100,
}}>
<AppModal
modalVisible={modalVisible}
setModalVisible = {setModalVisible}
name={recipient}
messageText={messageText}
/>
</View>
</ScrollView>
)
}
所以当我使用. where('recipient ','==',useData. uid)时,我得到这个错误,当我删除它时,代码可以正常工作。然而,我的目标是只从数据库中检索属于登录用户的消息。因此,每个用户登录只能访问他/她的消息。任何帮助都非常感谢。
1条答案
按热度按时间eit6fx6z1#
您将
userData
定义为数组,但试图将其作为对象(user.uid
)访问。const [userData, setUserData] = useState([]);
const message = db.collection('feedback').where('recipient','==',userData.uid)
因此,问题是当您在下面的
useEffect
中装载组件时,您运行的fetchData()
依赖于message
,message
使用undefined
进行recipient
比较。看起来你想从其他地方得到
uid
,因为在fetchData()
中你用一个项目列表设置userData
--所以你不能依赖userData
,因为它是空的/未定义的。查看
uid
实际上应该来自何处。**更新答案
在
Firebase Function
中,为了确保调用函数的用户经过身份验证(已登录),请使用onCall
类型函数中的context
参数:如果没有帮助,请告诉我!