Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.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 Firebase,React:将GET请求从GET()方法更改为onSnapshot()方法_Javascript_Reactjs_Firebase_Google Cloud Firestore_React Router - Fatal编程技术网

Javascript Firebase,React:将GET请求从GET()方法更改为onSnapshot()方法

Javascript Firebase,React:将GET请求从GET()方法更改为onSnapshot()方法,javascript,reactjs,firebase,google-cloud-firestore,react-router,Javascript,Reactjs,Firebase,Google Cloud Firestore,React Router,我编写了一个函数,它从firestore获取数据,过滤数据,并返回登录用户发布的数据。在本例中,数据为全球信息栅格列表: authListener(){ auth().onAuthStateChanged((用户)=>{ 如果(用户){ 这是我的国家( { 用户详细信息:用户 }, () => axios .得到( "https://us-central1-gig-fort.cloudfunctions.net/api/getGigListings" ) 。然后((res)=>{ 让filter

我编写了一个函数,它从firestore获取数据,过滤数据,并返回登录用户发布的数据。在本例中,数据为全球信息栅格列表:

authListener(){
auth().onAuthStateChanged((用户)=>{
如果(用户){
这是我的国家(
{
用户详细信息:用户
},
() =>
axios
.得到(
"https://us-central1-gig-fort.cloudfunctions.net/api/getGigListings"
)
。然后((res)=>{
让filteredGigs=res.data.filter((gig)=>{
返回gig.user==this.state.userDetails.uid;
});
这是我的国家({
filterGigs:filteredigs
});
})
);
}否则{
这是我的国家({
userDetails:null,
});
console.log(“没有用户登录”);
}
});
}
但是,当我呈现此数据时,我希望它能够实时订阅数据库更改,并且我还希望能够访问文档id。为此,我希望将此函数更改为使用
onSnapshot()
方法,以下是我的(粗略)尝试:

authListener(){
auth().onAuthStateChanged((用户)=>{
如果(用户){
这是我的国家(
{
用户详细信息:用户
},
() =>
firebase.firestore().collection('gig-listing').onSnapshot(querySnapshot=>{
让filteredGigs=querySnapshot.filter(gig=>{
返回gig.user==this.state.userDetails.uid;
})
})
这是我的国家({
filterGigs:filteredigs
});
})
);
此代码不起作用,我感觉有不止一个问题,但我得到的主要错误是
querySnapshot.filter不是一个函数
。有人能建议如何重新配置我的代码,以便我可以使用快照方法,而不是axios get请求吗?

querySnapshot是一个对象。从API文档中可以看到umentation,在该对象上没有方法
筛选
。如果要筛选某个对象,可能是想使用其属性,即包含实际文档数据的对象数组。因此,可能更像这样的东西是您想要的:

let filteredGigs = querySnapshot.docs.filter(snapshot => {
  return snapshot.data().user === this.state.userDetails.uid;
})


如果查看文档,则
onSnapshot()
方法返回一个。
QuerySnapshot
有一个
docs
属性,其中包含快照中的所有文档。因此,您可以按如下方式对其进行筛选:

firebase.firestore().collection('gig-listing').onSnapshot(querySnapshot=>querySnapshot.docs.filter(d=>{
常数数据=d.数据()
//对数据做任何事
})