Em nosso artigo anterior, discutimos Dexie, um invólucro do indexedDB. Neste artigo, discutimos indexedDB. Você deve estar familiarizado com esta API do LocalStorage, comumente usada para armazenar informações no navegador. Da mesma forma, o indexedDB é usado para armazenamento lateral do cliente.
MDN Documentação Explicação:
IndexedDB é uma API de baixo nível para armazenamento do lado do cliente de quantidades significativas de dados estruturados, incluindo arquivos/blobs. Esta API usa índices para ativar pesquisas de alto desempenho desses dados. Embora o armazenamento da web seja útil para armazenar quantidades menores de dados, é menos útil para armazenar quantidades maiores de dados estruturados.
indexedDB fornece uma solução. Esta é a principal página de destino para a cobertura indexedDB da MDN - aqui fornecemos links para os guias completos da API de referência e uso, detalhes de suporte do navegador e algumas explicações dos conceitos -chave.
MDN fornece um exemplo de repositório github e possui script/tdo.js.
O script é inicializado usando window.onload
window.onload = () => { }
// Let us open our database const DBOpenRequest = window.indexedDB.open('toDoList', 4);
// Register two event handlers to act on the database being opened successfully, or not DBOpenRequest.onerror = (event) => { note.appendChild(createListItem('Error loading database.')); };
DBOpenRequest.onsuccess = (event) => { note.appendChild(createListItem('Database initialised.')); // Store the result of opening the database in the db variable. This is used a lot below db = DBOpenRequest.result; // Run the displayData() function to populate the task list with all the to-do list data already in the IndexedDB displayData(); };
// Open a read/write DB transaction, ready for adding the data const transaction = db.transaction(['toDoList'], 'readwrite'); // Call an object store that's already been added to the database const objectStore = transaction.objectStore('toDoList'); // Make a request to add our newItem object to the object store const objectStoreRequest = objectStore.add(newItem[0]); objectStoreRequest.onsuccess = (event) => { // process data on success. } // Report on the success of the transaction completing, when everything is done transaction.oncomplete = () => { note.appendChild(createListItem('Transaction completed: database modification finished.')); // Update the display of data to show the newly added item, by running displayData() again. displayData(); }; // Handler for any unexpected error transaction.onerror = () => { note.appendChild(createListItem(`Transaction not opened due to error: ${transaction.error}`)); };
você pode ter percebido agora que há muito código necessário apenas para adicionar um registro, você tem retornos de chamada assíncronos como o Onerror e Onsuccess. Isso é apontado nesta resposta da troca de pilha.
para simplificar o manuseio deste indexedDB, dexie pode ser usado.
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))} /> > ); }
Esta API de Wrapper me lembra ORMs como Prisma e Drizzle.
No ThinkThroo, estudamos grandes projetos de código aberto e fornecemos guias arquitetônicos. Desenvolvemos componentes de reubale, construídos com o Tailwind, que você pode usar em seu projeto. Oferecemos Next.js, React e Node Development Services.
Reserve uma reunião conosco para discutir seu projeto.
https://www.reddit.com/r/sveltejs/comments/15rj12h/any_downsides_to_using_indexeddb_vs_localstorage/
https://developer.mozilla.org/en-us/docs/web/api/indexeddb_api
https://github.com/mdn/dom-examples/tree/main/to-do-notifications
https://softwareengineering.stackexchange.com/questions/219953/how-is-localstorage-different-from-indexeddb
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3