Как проверить id IndexedDB уже существует внутри методов жизненного цикла React - PullRequest
0 голосов
/ 17 мая 2018

У меня есть компонентact.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"); Будете ли вылюбезно дать мне какой-нибудь совет о как проверить, существует ли БД ?
Спасибо заранее!

1 Ответ

0 голосов
/ 18 мая 2018

IndexedDB является асинхронным, и ваш код проверяет dbExist синхронно, поэтому он не будет работать.Вы можете использовать localStorage для установки значения - поэтому, когда db создается, вы устанавливаете значение в 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, чтобы проверить, создан ли db или нет, а также предоставляет простой sql-подобный api для почти всех функциональных возможностей db.

Проверьте пример реакции для получения дополнительной информации - https://github.com/ujjwalguptaofficial/JsStore/tree/master/examples/react

...