如何检查 id IndexedDB 已经存在于 React 生命周期方法中

How to check id IndexedDB already exist inside of React lifecycle methods

我有 react.js 组件,我想在其中检查 IndexedDB 是否存在。

我正在尝试这样做

componentDidMount() {
    var dbExists = true;
    var openReq = indexedDB.open("dbName");
    openReq.onupgradeneeded = e => {
      e.target.transaction.abort();
      dbExists = false;

      console.log("Does not exist");
      this.setState({redirect: false})
    };

    if (dbExists) {
      this.setState({redirect: true})
    }
  }

但它没有按预期工作 - 即使 IndexedDB 和名称 dbName 存在它显示这一行 console.log("Does not exist"); 您能给我一些关于如何检查数据库是否存在的建议吗?
先谢谢你了!

IndexedDB 是异步的,您的代码正在以同步方式检查 dbExist,因此它不会工作。您可以使用 localStorage 来设置值 - 所以当创建数据库时,您将值设置为 true,默认情况下在您的应用程序启动时将其设置为 false。

所以在您的应用启动时,您需要执行以下代码 -

var isDbCreated = localStorage.getItem('is_db_created')==='true';
if(!isDbCreated){
    localStorage.setItem('is_db_created','false');
}

并且在创建数据库时在 onupgradeneeded 中将其设置为 true -

localStorage.setItem('is_db_created','true');

如果您发现它很难 - 考虑使用 jsstore 库 - 它提供 api 检查是否创建了数据库,它还提供了简单的 sql 就像 [=24] =] 几乎所有数据库功能。

查看 React 示例以获取更多信息 - https://github.com/ujjwalguptaofficial/JsStore/tree/master/examples/react