【发布时间】:2021-01-29 12:59:28
【问题描述】:
我编写了一个函数,该函数从我的 Firestore 中获取数据,对其进行过滤,然后返回仅由登录用户发布的数据。在这种情况下,数据是演出列表:
authListener() {
auth().onAuthStateChanged((user) => {
if (user) {
this.setState(
{
userDetails: user
},
() =>
axios
.get(
"https://us-central1-gig-fort.cloudfunctions.net/api/getGigListings"
)
.then((res) => {
let filteredGigs = res.data.filter((gig) => {
return gig.user === this.state.userDetails.uid;
});
this.setState({
filterGigs: filteredGigs
});
})
);
} else {
this.setState({
userDetails: null,
});
console.log("no user signed in");
}
});
}
但是,当我呈现这些数据时,我希望它能够实时订阅数据库更改,并且我还希望能够访问文档 ID。为此,我想将此函数更改为使用onSnapshot() 方法,这是我的(粗略)尝试:
authListener() {
auth().onAuthStateChanged((user) => {
if (user) {
this.setState(
{
userDetails: user
},
() =>
firebase.firestore().collection('gig-listing').onSnapshot(querySnapshot=> {
let filteredGigs = querySnapshot.filter(gig => {
return gig.user === this.state.userDetails.uid;
})
})
this.setState({
filterGigs: filteredGigs
});
})
);
这段代码不起作用,我感觉问题不止一个,但我得到的主要错误是querySnapshot.filter is not a function。谁能建议如何重新配置我的代码,以便我可以使用快照方法,而不是我的 axios 获取请求?
【问题讨论】:
标签: javascript reactjs firebase google-cloud-firestore react-router