【发布时间】:2019-09-17 22:21:20
【问题描述】:
我正在开发一个 React/redux 应用程序,我的想法是使用 onSnapshot 订阅我的所有 firebase 集合,并在每次更新时更新状态,React 将在每次状态更改时更新 UI。
但是,我也有触发多个集合(比如 A 和 B)中的更新的 redux 操作,它们将导致不同的 onSnapshot 调用。这使我的 UI 不一致。
Firebase 中的最佳做法是什么?
【问题讨论】:
我正在开发一个 React/redux 应用程序,我的想法是使用 onSnapshot 订阅我的所有 firebase 集合,并在每次更新时更新状态,React 将在每次状态更改时更新 UI。
但是,我也有触发多个集合(比如 A 和 B)中的更新的 redux 操作,它们将导致不同的 onSnapshot 调用。这使我的 UI 不一致。
Firebase 中的最佳做法是什么?
【问题讨论】:
我不完全确定我是否正确理解了您的情况,但我认为您是说您可能会进行更新以更改 2 个集合(A 和 B)并且您有 2 个 onSnapshot 侦听器,一个在集合 A和一个在集合 B 上,这些 onSnapshot 事件不会同时触发,导致您的 UI 不同步。
所以,好消息是,我们正在研究一种名为onSnapshotsInSync 的新方法,我认为它应该只在两个侦听器同步时触发一次。它还没有准备好,但希望很快就会完成。 WIP commit here
与此同时,我不确定最流行的解决方法是什么,但它会涉及某种客户端检查您的数据是否同步。也许有一种合乎逻辑的方法可以根据您拥有的数据类型进行检查,如果没有,我猜您可以做的一件事是发送相同的唯一字符串(基于时间戳?)与每个同时更新,然后如果所有数据都没有相同的匹配字符串,则不渲染您的渲染代码。这看起来确实不太理想,所以希望我们能尽快推出新方法。
【讨论】:
onSnapshotsInSync :)
onSnapshotsInSync 上的任何文档?我今天试了一下,得到了ncaught FirebaseError: Function Firestore.onSnapshotsInSync() requires its first argument to be of type function。最初我认为这是一个 thenable 函数,但显然不是。