Wyszukaj / o blogu

JavaScript - przechowywanie danych lokalnie oraz w sesji

Opublikowano ptk 22 maja 2020 w javascript • 1 min read

Lokalna pamięć przeglądarki pozwala na przechowywanie danych przy pomocy JavaScript bezterminowo.

Dane przechowywane w lokalnej pamięci przeglądarki nie mogą przekroczyć 5mb i nie powinny znajdować się w nich dane poufne. Lokalna pamięć przeglądarki działa w sposób synchroniczny (odpowiada na zapytania po kolei).

Aby korzystać z tzw local storage (LS) można wykorzystać jedną z 5 dostępnych metod.

Metoda główna cecha
setItem() Dodaj element (klucz oraz wartość)
getItem() Zwraca element po kluczu
removeItem() Usuwa element po kluczu
clear() Czyści pamięć LS
key() pozwala na pozyskanie klucza z obiektu znajdującego się z LS

Przykładowe zastosowanie

window.localStorage.setItem('droid', 'r2d2');

window.localStorage.getItem('droid');

>> "r2d2"

Istotne jest to że pamięć lokalna przeglądarki może przechowywać jedynie łańcuchy znaków (stringi) w tym również stringi JSON stąd często stosuje się metody interpolujące obiekty lub tablice do tego formatu stosując metody JSON.stringify() zmień w JSON string oraz JSON.parse() (tworzy obiekt opisany przez JSON string)

const newDroid = {
  name: "r2d2",
  type: "Astromech droid",
}

window.localStorage.setItem('newDroid', JSON.stringify(newDroid));

window.localStorage.getItem('newDroid');

>> "{"name":"r2d2","type":"Astromech droid"}"

Konwersja w obiekt

JSON.parse(window.localStorage.getItem('user'));

>> {name: "r2d2", type: "Astromech droid"}
    name: "r2d2"
    type: "Astromech droid"
    __proto__: Object

Przykładowe zastosowanie w aplikacji - zapisanie elementu jako częsci tablicy tasks

źródło kodu: org repo

function storeTaskInLocalStorage(task) { let tasks; if(localStorage.getItem('tasks') === null){ tasks = []; } else { tasks = JSON.parse(localStorage.getItem('tasks')); } tasks.push(task);

localStorage.setItem('tasks', JSON.stringify(tasks));

}

usunięcie elementu z lokalnej pamięci

function removeTaskFromLocalStorage(taskItem) {
  let tasks;
  if(localStorage.getItem('tasks') === null){
    tasks = [];
  } else {
    tasks = JSON.parse(localStorage.getItem('tasks'));
  }

  tasks.forEach(function(task, index){
    if(taskItem.textContent === task) {
      tasks.splice(index, 1);
    }
  });

  localStorage.setItem('tasks', JSON.stringify(tasks));
}

Źródła:

http://kursjs.pl/kurs/storage/storage.php

https://blog.logrocket.com/the-complete-guide-to-using-localstorage-in-javascript-apps-ba44edb53a36/

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse