我只想向用户显示他订阅的那些列表,但我无法访问文档。 显示每个列表效果很好,但我不想为每个用户显示每个列表。 doc 中的 users 是 doc 中的一个数组,因为一个列表可以被多个访问。
我的代码尝试:
const userName = "Arex Speed";
const [myLists, setMyLists] = useState([])
//get all lists - work good
useEffect(() => {
db.collection('lists').onSnapshot(snapshot => (
setMyLists(
snapshot.docs.map(doc => ({
id: doc.id,
name: doc.data().name,
users: doc.data().users,
}))
)
))
},[])
//trying filter by where - show epmty
useEffect(() => {
db.collection('lists')
.where("users", "array-contains", "name")
.where("name", "==", userName)
.get()
.then(snapshot => (
setMyLists(
snapshot.docs.map(doc => ({
id: doc.id,
name: doc.data().name,
users: doc.data().users,
}))
)
))
},[])
//try filter by docs -show empty
useEffect(() => {
db.collection('lists')
.onSnapshot(snapshot => (
snapshot.docs.fiter(doc => (
doc.data().users.find(user =>
user.name === userName && setMyList(prev =>
[...prev, doc])
)
))
)
)
},[])
答案 0 :(得分:0)
也许当用户点击订阅一个列表时,将该列表名称作为键并将 id 作为值写入用户对象。然后用户将拥有他将订阅的所有用户。然后您将映射真实列表并检查用户是否拥有该列表,然后将其返回。