在 Firebase 中按用户过滤和显示列表

时间:2021-03-16 15:17:09

标签: reactjs firebase

我只想向用户显示他订阅的那些列表,但我无法访问文档。 显示每个列表效果很好,但我不想为每个用户显示每个列表。 doc 中的 users 是 doc 中的一个数组,因为一个列表可以被多个访问。

从数据库看: enter image description here

我的代码尝试:

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])
        )
      ))
    )
    )
  },[])

1 个答案:

答案 0 :(得分:0)

也许当用户点击订阅一个列表时,将该列表名称作为键并将 id 作为值写入用户对象。然后用户将拥有他将订阅的所有用户。然后您将映射真实列表并检查用户是否拥有该列表,然后将其返回。