「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > IndexedDBは説明しました。

IndexedDBは説明しました。

2025-03-23に投稿されました
ブラウズ:788

以前の記事では、indexedDBのラッパーであるDexieについて説明しました。この記事では、indexedDBについて説明します。ブラウザに情報を保存するために一般的に使用されるこのLocalStorage APIに精通している必要があります。同様に、indexedDBはクライアント側のストレージに使用されます。

indexeddbとは?とは何ですか

mdnドキュメントの説明:

IndexEdDBは、ファイル/ブロブを含むかなりの量の構造化データをクライアント側のストレージの低レベルAPIです。このAPIは、インデックスを使用して、このデータの高性能検索を有効にします。 Webストレージは少量のデータを保存するのに役立ちますが、構造化されたデータを大量に保存するのにあまり役立ちません。

IndexedDB explained.

indexedDBはソリューションを提供します。これは、MDNのIndexEdDBカバレッジのメインランディングページです。ここでは、完全なAPIリファレンスおよび使用ガイド、ブラウザのサポートの詳細、および重要な概念の説明へのリンクを提供します。

例リポジトリ:

mdnはGithubリポジトリの例を提供し、スクリプト/todo.jsを持っています。

スクリプトはwindow.onload

を使用して初期化されます


window.onload =()=> { }

window.onload = () => {
}
データベースへのリクエストを開きます:

//データベースを開いてみましょう const dbopenrequest = window.indexeddb.open( 'todolist'、4);

window.onload = () => {
}
接続エラー:

// 2つのイベントハンドラーを登録して、データベースに正常に開かれているかどうかに基づいて行動するかどうか dbopenrequest.onerror =(event)=> { note.appendChild(createListitem( 'エラーデータベースの読み込み')); };

window.onload = () => {
}
成功したデータベース接続について:

dbopenrequest.onsuccess =(event)=> { note.appendChild(createListitem( 'データベースInterivesided。')); //データベースをDB変数に開いた結果を保存します。これは以下でよく使用されます db = dbopenrequest.result; // displayData()関数を実行して、タスクリストにすべてのto-doリストデータに既にindexedDBに入力されます displayData(); };

window.onload = () => {
}
データを追加

//読み取り/書き込みDBトランザクションを開き、データを追加する準備ができています const transaction = db.transaction(['todolist']、 'readwrite'); //データベースに既に追加されているオブジェクトストアを呼び出す const objectstore = transaction.objectstore( 'todolist'); // newItemオブジェクトをオブジェクトストアに追加するリクエストを行う const objectStorerequest = objectStore.add(newItem [0]); ObjectStorereQuest.Onsuccess =(event)=> { //成功に関するデータを処理します。 } //すべてが完了したときに、トランザクションの成功に関するレポート transaction.oncomplete =()=> { note.AppendChild(createListitem( 'トランザクションが完了:データベースの変更が完了しました。')); // DisplayData()を再度実行して、データの表示を更新して、新しく追加されたアイテムを表示します。 displayData(); }; //予期しないエラーのハンドラー transaction.onerror =()=> { note.appendChild(createListitem( `エラーのためにトランザクションが開かれていない:$ {transaction.error}`)); };

window.onload = () => {
}
観察:localStorage vs indexeddb

レコードを追加するためだけに多くのコードが必要であり、OnerrorやOnsuccessなどの非同期コールバックがあることに気付くかもしれません。これは、このスタック交換の回答で指摘されています。

このindexedDBの処理を簡素化するために、dexieを使用できます。

dexieでデータを追加:

export関数Addfriendform({defaultage} = {defaultage:21}){ const [name、setname] = uesestate( ''); const [age、setage] = uesestate(defaultage); const [status、setstatus] = uesestate( ''); async関数addfriend(){ 試す { //新しい友達を追加してください! const id = await db.friends.add({ 名前、 年 }); setStatus( `friend $ {name}に正常に追加されました。ID$ {id}`)を取得しました。 setName( ''); setage(defaultage); } catch(error){ setStatus( `$ {name}を追加しなかった:$ {error}`); } } 戻る (

{status}

名前: setName(ev.target.value)} /> 年: setage(number(ev.target.value))} /> > ); }
export function AddFriendForm({ defaultAge } = { defaultAge: 21 }) {
 const [name, setName] = useState('');
 const [age, setAge] = useState(defaultAge);
 const [status, setStatus] = useState('');
async function addFriend() {
 try {
 // Add the new friend!
 const id = await db.friends.add({
 name,
 age
 });
setStatus(`Friend ${name} successfully added. Got id ${id}`);
 setName('');
 setAge(defaultAge);
 } catch (error) {
 setStatus(`Failed to add ${name}: ${error}`);
 }
 }
return (
 
 

{status}

Name: setName(ev.target.value)} /> Age: setAge(Number(ev.target.value))} /> > ); }

私たちについて:

Thinkthrooで、大規模なオープンソースプロジェクトを研究し、建築ガイドを提供しています。プロジェクトで使用できるTailwindで構築されたResubaleコンポーネントを開発しました。 next.js、Reactおよびノー​​ド開発サービスを提供します。

あなたのプロジェクトについて話し合うために私たちとの会議を予約してください。

IndexedDB explained.

IndexedDB explained.

参照:

    https://www.reddit.com/r/sveltejs/comments/15rj12h/any_downsides_to_using_indexeddb_vs_localstorage/
  1. https://developer.mozilla.org/en-us/docs/web/api/indexeddb_api
  2. https://github.com/mdn/dom-examples/tree/main/to-do-notifications
  3. https://softwareengineering.stackexchange.com/questions/219953/how-is-localstorage-different-from-indexeddb
リリースステートメント この記事は、https://dev.to/thinkthroo/indexeddb-explained-4gmg?1に複製されています。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3