Javascript redux存储和数据库之间的循环导致reducer执行调度操作

Javascript redux存储和数据库之间的循环导致reducer执行调度操作,javascript,firebase,redux,synchronize,Javascript,Firebase,Redux,Synchronize,我有一个JavaScript应用程序,它使用redux存储来跟踪应用程序的当前状态。我最近添加了将redux商店的状态提升到远程网站(Firebase)提供的在线数据库的功能 这意味着,当用户登录到应用程序时,将从数据库中提取redux存储的状态,并使用操作应用该状态,以便正确设置应用程序的状态 接下来,我添加了应用程序在某些内容发生更改时自动将对redux存储的更改推送到数据库的功能。这一部分本身也起作用 我现在遇到的问题是,当我同时启用两者时。我有一个要求,多个用户可以连接到一个在线数据库“

我有一个JavaScript应用程序,它使用redux存储来跟踪应用程序的当前状态。我最近添加了将redux商店的状态提升到远程网站(Firebase)提供的在线数据库的功能

这意味着,当用户登录到应用程序时,将从数据库中提取redux存储的状态,并使用操作应用该状态,以便正确设置应用程序的状态

接下来,我添加了应用程序在某些内容发生更改时自动将对redux存储的更改推送到数据库的功能。这一部分本身也起作用

我现在遇到的问题是,当我同时启用两者时。我有一个要求,多个用户可以连接到一个在线数据库“会话”。这意味着两个用户都需要监听数据库中的更改以相应地同步他们自己的redux存储。我所看到的问题是,当我试图允许从本地redux商店的更新推送到数据库时。浏览器正在抱怨redux从reducer分派操作。在应用程序中,用户启动一个操作来更新redux存储的状态。在reducer中,我看到存储发生了更改,因此我调用了数据库来更新其状态。当数据库状态发生更改时,我有一个侦听器,它会触发以通知我需要更新redux存储。然后启动另一个更新redux存储的操作,这就是我得到错误的地方。我如何打破这个循环


我需要能够侦听数据库中的更改,并让这些更改启动更新redux存储的操作。但我还需要redux存储能够监听更改,并在存储更改时启动对数据库的更新。我不想陷入无限循环,而且,当两个用户对自己的redux应用商店进行不同的更改并在数据库中注册这两个更改时,我需要能够优雅地处理这种情况。

您是否正在侦听数据库中由于在另一个网页上同步同一用户的应用而发生的更改?我还没有决定是否允许或阻止用户进行更改从多个浏览器选项卡登录到同一数据库会话。因此,目前我没有做任何特别的事情,如果用户尝试这样做,但我目前没有对此进行测试。如果是这样,那么如果您的redux在尝试更新自身之前有最新的更改,您可以进行一些日志条目跟踪。您需要确定应用程序的redux还是数据库的redux是唯一的真相来源。将该决策与日志结合使用将帮助你的应用程序决定下一步要做什么。数据库必须是真相的来源,因为它是多个用户唯一可以访问的东西。也就是说,我仍然需要一个本地redux商店来保持应用程序工作,即使用户未登录,并且应用程序仅在本地使用,那么只需保留更改日志即可。每当您将最新更改上载到数据库时,返回并存储时间戳。每当db因db更改而发回消息时,请包含更改的时间戳,并与以前存储的内容进行比较。如果相同,则忽略数据库的更新。