我想更新Firestore记录,然后立即使用更新后的记录设置React组件状态。
Firestore允许您使用两种方式更新记录,一种是使用set
标志使用{merge: true}
,另一种是使用update
。这两个都返回一个诺言,允许您将then()
链接到更新函数。但是,promise不会返回更新的记录。
还提供了onSnapshot
函数,该函数在记录更新时重新运行查询函数。但是我正在寻找一种根据更新的位置以不同的方式使用更新的记录的方法,因此onSnapshot
太宽泛了。
尝试立即使用记录似乎无效。
let doc = this.state.doc
this.state.doc.ref.update({published: true}).then(() => {
this.setState({doc: doc})
})
render() {
console.log(doc.data().published) // false
}
解决此问题的一种方法是在像这样设置之后get
:
this.state.doc.ref.update({published: true}).then(() => {
db.collection('articles').doc(this.state.doc.id).get()
.then(doc => {
this.setState({doc: doc})
})
})
这明显慢一些,因为它在最终获得记录之前进行了两个数据库调用。
反正有没有更新记录并立即使用它而又不与数据库往返的问题?