我们正在使用DexieJS作为IndexedDb的 Package 器,并寻找一种方法来确定底层数据库模式是否发生了变化。最坏的情况是,用户在使用我们的应用程序的过程中删除了一个表或整个数据库(不太可能--当然,但拜托-, users)。或者,IndexedDb是否记录类似“上次修改”值的内容?如果我们只有这些可用的话,我们可以让它工作。不过,可订阅的事件会更好... IndexedDb或Dexie是否支持类似的内容?
ctrmrzij1#
架构更改必须在IndexedDB中进行版本升级,并且每当架构更改时都会触发一个事件“onversionchange”。Dexie在此处描述该事件:https://dexie.org/docs/Dexie/Dexie.on.versionchange。如果你想在table.clear()等正常的非模式更改时得到通知,你应该尝试dexie的最新alpha版本(3.1.0-alpha.8),它支持跨窗口/worker表观察。参见release notes for 3.1.0-alpha.1或this blog post。在你的情况下,你可能想观察整个表的任何更改。要做到这一点,请用途:
const observable = liveQuery(() => db.yourTable.toArray());
还有一个较低级别的事件,如果您希望只收到通知而不重新查询数据:请参阅此问题备注。注意,dexie只能观察那些使用dexie来改变数据的代码所产生的变化,它不会对直接进入indexedDB API的变化做出React,因为DOM API中没有这样的原生事件。
1条答案
按热度按时间ctrmrzij1#
架构更改必须在IndexedDB中进行版本升级,并且每当架构更改时都会触发一个事件“onversionchange”。Dexie在此处描述该事件:https://dexie.org/docs/Dexie/Dexie.on.versionchange。
如果你想在table.clear()等正常的非模式更改时得到通知,你应该尝试dexie的最新alpha版本(3.1.0-alpha.8),它支持跨窗口/worker表观察。参见release notes for 3.1.0-alpha.1或this blog post。在你的情况下,你可能想观察整个表的任何更改。要做到这一点,请用途:
还有一个较低级别的事件,如果您希望只收到通知而不重新查询数据:请参阅此问题备注。
注意,dexie只能观察那些使用dexie来改变数据的代码所产生的变化,它不会对直接进入indexedDB API的变化做出React,因为DOM API中没有这样的原生事件。