如何在React生命周期方法

时间:2018-05-17 11:12:29

标签: javascript database html5 reactjs indexeddb

我有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的{​​{1}}存在,也会显示此行dbName 您是否愿意向我提供有关如何检查数据库是否存在的任何建议?
先谢谢你了!

1 个答案:

答案 0 :(得分:1)

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

因此,在应用程序启动时,您需要执行以下代码 -

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

并在创建db时进行onupgradeneeded,将其设置为true -

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

如果你发现它很难 - 考虑使用jsstore库 - 它给api检查是否创建了db,并且它提供了几乎所有数据库功能的简单sql,如api。

检查出反应示例以获取更多信息 - https://github.com/ujjwalguptaofficial/JsStore/tree/master/examples/react