localStorage kann ein unglaublich nützliches Werkzeug zur Erstellung von Erlebnissen für Anwendungen, Erweiterungen, Dokumentationen und eine Vielzahl von Anwendungsfällen sein. Ich persönlich habe es bei jedem einzelnen davon verwendet! In Fällen, in denen Sie etwas Kleines für den Benutzer speichern, das nicht dauerhaft aufbewahrt werden muss, ist localStorage unser Freund. Kombinieren wir localStorage mit Vue, was ich persönlich als eine großartige und leicht lesbare Entwicklungserfahrung empfinde.
Vereinfachtes Beispiel
Ich habe kürzlich einen Frontend Masters-Kurs unterrichtet, in dem wir eine Anwendung von Anfang bis Ende mit Nuxt erstellt haben. Ich suchte nach einer Möglichkeit, die Art und Weise, wie wir sie erstellten, in kleinere Abschnitte zu zerlegen und sie nach und nach abzuhaken, da wir viel zu behandeln hatten. localStorage war eine Lösung, da jeder seinen eigenen Fortschritt persönlich verfolgte und ich nicht unbedingt all diese Informationen in etwas wie AWS oder Azure speichern musste.
Hier ist das Endprodukt, das wir erstellen, eine einfache To-do-Liste
Speichern der Daten
Wir beginnen mit der Festlegung der Daten, die wir für alle Elemente benötigen, die wir möglicherweise abhaken möchten, sowie einem leeren Array für alles, was vom Benutzer abgehakt wird.
export default {
data() {
return {
checked: [],
todos: [
"Set up nuxt.config.js",
"Create Pages",
// ...
]
}
}
}
Wir werden es auch auf der Seite im Template-Tag ausgeben
<div id="app">
<fieldset>
<legend>
What we're building
</legend>
<div v-for="todo in todos" :key="todo">
<input
type="checkbox"
name="todo"
:id="todo"
:value="todo"
v-model="checked"
/>
<label :for="todo">{{ todo }}</label>
</div>
</fieldset>
</div>
Mounting und Watching
Derzeit reagieren wir auf die Änderungen in der Benutzeroberfläche, aber wir speichern sie noch nicht irgendwo. Um sie zu speichern, müssen wir localStorage mitteilen: „Hallo, wir sind daran interessiert, mit Ihnen zu arbeiten.“ Dann müssen wir auch in die Reaktivität von Vue eingreifen, um diese Änderungen zu aktualisieren. Sobald die Komponente gemountet ist, verwenden wir den mounted Hook, um ausgewählte Elemente in der To-do-Liste auszuwählen und sie dann in JSON zu parsen, damit wir die Daten in localStorage speichern können.
mounted() {
this.checked = JSON.parse(localStorage.getItem("checked")) || []
}
Jetzt beobachten wir diese checked Eigenschaft auf Änderungen, und wenn sich etwas ändert, aktualisieren wir ebenfalls localStorage!
watch: {
checked(newValue, oldValue) {
localStorage.setItem("checked", JSON.stringify(newValue));
}
}
Das ist alles!
Das ist eigentlich alles, was wir für dieses Beispiel brauchen. Dies zeigt nur einen kleinen möglichen Anwendungsfall, aber Sie können sich vorstellen, wie wir localStorage für so viele performante und persönliche Erlebnisse im Web nutzen könnten!
Alle Checkboxen sind an denselben v-model gebunden, sodass alle Boxen angehakt werden, wenn eine angeklickt wird.
Ich sehe das nicht so – wenn Sie die Demo in einem Debug-Fenster überprüfen: https://cdpn.io/sdras/debug/JjXdNrO und dann im Chrome DevTools auf den Reiter „Application“ und dann auf „Local Storage“ gehen, können Sie sehen, dass sie korrekt aktualisiert werden. Lassen Sie mich wissen, wenn Sie etwas anderes reproduzieren können! Würde es gerne sehen. Danke!
Hallo, tolles kleines Tutorial! Habe gerade ein kleines Problem gefunden: Wenn ein Benutzer
checkednoch nicht in localStorage hat, liest er beim Mountencheckedalsnull, was zufalsegeparst wird und zu einem fehlerhaften Verhalten führt, bei dem das Abhaken einer Checkbox alle Checkboxen abhakt. Eine schnelle Korrektur wäre, beim Lesen aus localStorage auf ein leeres Array zurückzufallen.Danke! aktualisiert
Für Composition API-Benutzer gibt es viele Optionen, die es einfacher machen: einige funktionieren fast wie ref()-Ersatz und andere synchronisieren Daten bereits zwischen Tabs.
Ich habe kürzlich ein ganzes CMS / DB-Ding basierend auf LocalStorage und Vue geschrieben. Leider ist es noch nicht Open Source, da das UI-Kit derzeit geschlossen ist. :(
https://cocktailcms.com/
Liebe es. Danke! Ein guter Anfang, um die Nutzung zu verstehen
Bevor Sie in Local Storage schreiben, sollten Sie wahrscheinlich prüfen, ob dies überhaupt möglich ist, da das Kontingent möglicherweise voll ist oder der Browser Safari im Inkognito-Modus ist.
Ich habe kürzlich festgestellt, dass localStorage beim Testen mit jest nicht nativ vorhanden ist und gemockt werden muss.
https://github.com/d-kochanzhi/LocalStorageAdapter
Schönes Tutorial. Es wäre vielleicht erwähnenswert, die Sicherheitsbedenken bei der Verwendung von localStorage zu nennen und die Formulierung "In Fällen, in denen Sie etwas Kleines für den Benutzer speichern, das nicht dauerhaft aufbewahrt werden muss, ist localStorage unser Freund." umzuformulieren. localStorage wird tatsächlich lange nach dem Ende der Sitzung aufbewahrt, es sei denn, Sie löschen localStorage manuell. Dies könnte neuen Entwicklern die falsche Vorstellung vermitteln, insbesondere wenn sie anfangen, JWTs in localStorage zu speichern - in diesem Fall möchten sie sessionStorage, das nach dem Schließen des Browser-Tabs oder -Fensters beendet wird. Ansonsten genieße ich Ihre Schreibweise sehr. Besonders Ihre Einblicke in CSS und SVG.