【问题标题】:How to orderByValue onSnapshot using Firestore如何使用 Firestore 按值排序
【发布时间】:2018-03-26 11:38:15
【问题描述】:

componentWillMount 中,我正在注册一个更新状态的 onSnapshot 函数。

componentWillMount () {
    todoRef.onSnapshot((doc) => {
      let todos = []
      doc.forEach(doc => {todos.push(doc.data())})
      this.setState({
        todos
      })
    })
  }

但是,firebase/firestore 的工作方式是它只是推送随机键,所以当我取回数据时,它的顺序不正确。

我知道有一个 .orderByValue() 函数,但我已经尝试实现它,但似乎无法弄清楚。

【问题讨论】:

    标签: javascript reactjs firebase google-cloud-firestore


    【解决方案1】:
      const [todos, setTodos] = useState([]);
    
      useEffect(() => {
        db.collection('todo_collection')
          .orderBy('dateTime')
          .onSnapshot((snapshots) => {
            setTodos(snapshots.docs.map((doc) => doc.data()));
          });
      }, []);
    

    【讨论】:

    • 虽然此代码可能会解决问题,但 including an explanation 关于如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提出问题的人。请edit您的答案添加解释并说明适用的限制和假设。
    【解决方案2】:

    我的参考是const todoRef = db.collection("todos");

    因此,一旦您获得了对您的集合的引用,您就可以进行排序查询。

    todoRef.orderBy('createdAt').onSnapshot((docSnapShot) => {
      let todos = []
      docSnapShot.forEach(doc => {todos.push(doc.data())})
      this.setState({
        todos
      })
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-05
      • 2022-01-07
      • 2018-03-26
      • 2021-02-20
      • 1970-01-01
      • 2023-03-17
      相关资源
      最近更新 更多