Was heißt Pinia? Wie verwende ich es in Vue?
Was ist Pinia? Warum Pinia verwenden? Dieser Artikel wird Ihnen Pinia vorstellen und die grundlegende Verwendung von Pinia anhand von Beispielen vorstellen. Ich hoffe, er wird Ihnen hilfreich sein!
Was ist Pinia?
Pinia war ursprünglich ein Experiment im November 2019, bei dem das Erscheinungsbild des Vue Store mithilfe der Composition API neu gestaltet wurde. Von da an sind die ursprünglichen Prinzipien immer noch dieselben, aber Pinia funktioniert auf Vue 2 und Vue 3 und erfordert nicht die Verwendung der Kompositions-API . Abgesehen von Installation und SSR ist die API für beide die gleiche, und die Dokumentation ist spezifisch für Vue 3, mit Kommentaren zu Vue 2, wo nötig , damit sowohl Vue 2- als auch Vue 3-Benutzer sie lesen können! 【Verwandte Empfehlung: vue.js Video-Tutorial】
Warum Pinia verwenden?
Pinia ist ein Repository für Vue, mit dem Sie den Status über Komponenten/Seiten hinweg teilen können. ç Dies gilt für eine Single-Page-Anwendung, aber wenn sie serverseitig gerendert wird, wird Ihre Anwendung Sicherheitslücken ausgesetzt. Aber auch bei kleinen einseitigen Anwendungen können Sie durch die Verwendung von Pinia viele Vorteile erzielen:
- Unterstützung für Entwicklungstools
- Zeitleisten für Aktionen und Mutationen verfolgen
- Speicher erscheinen in den Komponenten, die sie verwenden
- Zeit Reisen und einfacheres Debuggen. JS-Benutzer mit richtige TypeScript-Unterstützung oder
- Autovervollständigung
-
Serverseitige Rendering-Unterstützung
- Einfaches Beispiel
- So sieht die Verwendung von Pinia in Bezug auf die API aus (sehen Sie sich unbedingt
an, um eine vollständige Anleitung zu erhalten). Sie erstellen zunächst einen Store: // stores/counter.js import { defineStore } from 'pinia' export const useCounterStore = defineStore('counter', { state: () => { return { count: 0 } }, // could also be defined as // state: () => ({ count: 0 }) actions: { increment() { this.count++ }, }, })
Nach dem Login kopierenund verwenden ihn dann in einer Komponente
:- Sie können sogar eine Funktion (ähnlich einer Komponente
setup()
) verwenden, um sie für eine erweiterte Verwendung zu definieren Cases A Store:Wenn Sie mit derexport const useCounterStore = defineStore('counter', () => { const count = ref(0) function increment() { count.value++ } return { count, increment } })
Nach dem Login kopierensetup()
Composition API noch nicht vertraut sind, machen Sie sich keine Sorgen, Pinia unterstützt auch einen ähnlichen Satz von Map-Helfer, wie z. B. Vuex . Sie definieren den Speicher auf die gleiche Weise, verwenden dann aber const useCounterStore = defineStore('counter', { state: () => ({ count: 0 }), getters: { double: (state) => state.count * 2, }, actions: { increment() { this.count++ } } }) const useUserStore = defineStore('user', { // ... }) export default { computed: { // other computed properties // ... // gives access to this.counterStore and this.userStore ...mapStores(useCounterStore, useUserStore) // gives read access to this.count and this.double ...mapState(useCounterStore, ['count', 'double']), }, methods: { // gives access to this.increment() ...mapActions(useCounterStore, ['increment']), }, }
Nach dem Login kopierenSie werden mehr finden Informationen zu jedem
Kartenassistenten in Core Concepts.
import { useCounterStore } from '@/stores/counter' export default { setup() { const counter = useCounterStore() counter.count++ // with autocompletion ✨ counter.$patch({ count: counter.count + 1 }) // or using an action instead counter.increment() }, }
mapStores()
, mapState()
oder mapActions()
: Warum Pinia
Pinia (ausgesprochen /piːnjʌ/
, wie „peenya“ auf Englisch) ist piña
Ananas auf Spanisch), was ein gültiger Paketname ist. Eine Ananas ist eigentlich eine Gruppe einzelner Blüten, die sich zu mehreren Früchten verbinden. Ähnlich wie bei Geschäften entsteht jedes unabhängig voneinander, aber letztendlich sind alle miteinander verbunden. Es ist auch eine köstliche tropische Frucht, die in Südamerika beheimatet ist.
Ein realistischeres Beispielsetup()
)来为更高级的用例定义一个 Store:
import { defineStore } from 'pinia' export const todos = defineStore('todos', { state: () => ({ /** @type {{ text: string, id: number, isFinished: boolean }[]} */ todos: [], /** @type {'all' | 'finished' | 'unfinished'} */ filter: 'all', // type will be automatically inferred to number nextId: 0, }), getters: { finishedTodos(state) { // autocompletion! ✨ return state.todos.filter((todo) => todo.isFinished) }, unfinishedTodos(state) { return state.todos.filter((todo) => !todo.isFinished) }, /** * @returns {{ text: string, id: number, isFinished: boolean }[]} */ filteredTodos(state) { if (this.filter === 'finished') { // call other getters with autocompletion ✨ return this.finishedTodos } else if (this.filter === 'unfinished') { return this.unfinishedTodos } return this.todos }, }, actions: { // any amount of arguments, return a promise or not addTodo(text) { // you can directly mutate the state this.todos.push({ text, id: this.nextId++, isFinished: false }) }, }, })
如果您仍然不熟悉setup()
Composition API,请不要担心,Pinia 还支持一组类似的地图助手,例如 Vuex。您以相同的方式定义存储,但随后使用mapStores()
、mapState()
或mapActions()
:
您将在核心概念中找到有关每个地图助手的更多信息。
为什么选择Pinia
Pinia(发音为/piːnjʌ/
Dies ist ein vollständigeres Beispiel der API, die Sie in Pinia, sogar in JavaScript, verwenden werden. Für einige mag dies ausreichen, um loszulegen, ohne weiter zu lesen. Wir empfehlen Ihnen jedoch dennoch, den Rest der Dokumentation zu lesen oder dieses Beispiel zu überspringen und nach dem Lesen aller „Kernkonzepte“ wiederzukommen. rrreeeVergleich mit VuexPinia versucht, der Vuex-Philosophie so nahe wie möglich zu kommen. Es wurde entwickelt, um Vorschläge für die nächste Iteration von Vuex zu testen, und es war erfolgreich, da wir derzeit einen offenen RFC für Vuex 5 mit einer API haben, die der von Pinia sehr ähnlich ist
RFC
Während Vuex über RFCs so viel Feedback wie möglich von der Community sammelt, tut dies Pinia nicht. Ich teste Ideen basierend auf meiner Erfahrung beim Entwickeln von Apps, beim Lesen des Codes anderer Leute, bei der Arbeit für Kunden mit Pinia und beim Beantworten von Fragen auf Discord. Dadurch kann ich eine effiziente Lösung anbieten, die für eine Vielzahl von Situationen und Anwendungsgrößen geeignet ist. Ich veröffentliche häufig und entwickle die Bibliothek weiter, während ihre Kern-API unverändert bleibt.
Vergleich mit Vuex 3.x/4.x
Vuex 3.x ist Vuex für Vue 2 und Vuex 4.x ist Vue 3
Pinia API unterscheidet sich stark von Vuex ≤4, d. h. :
- Mutation existiert nicht mehr. Sie werden oft als sehr ausführlich angesehen. Sie brachten ursprünglich die Devtools-Integration mit, aber das ist kein Problem mehr.
- Es ist nicht erforderlich, benutzerdefinierte komplexe Wrapper zur Unterstützung von TypeScript zu erstellen, alles ist typisiert und die API ist so konzipiert, dass sie wann immer möglich die TS-Typinferenz nutzt.
- Keine magischen Zeichenfolgen mehr einfügen, Funktionen importieren, aufrufen – genießen Sie die automatische Vervollständigung!
- Es ist nicht nötig, Geschäfte dynamisch hinzuzufügen, sie sind alle standardmäßig dynamisch und Sie werden es nicht einmal bemerken. Beachten Sie, dass Sie sich weiterhin jederzeit manuell über den Shop anmelden können. Da dies jedoch automatisch erfolgt, müssen Sie sich keine Sorgen machen.
- Keine verschachtelten Strukturen von Modulen mehr. Sie können Geschäfte immer noch implizit verschachteln, indem Sie einen Laden innerhalb eines anderen Ladens importieren und verwenden, aber Pinia bietet eine flache Struktur und unterstützt dennoch die Kreuzkombination zwischen Geschäften. Sie können sogar zirkuläre Abhängigkeiten vom Shop haben. Module
- ohne Namespace. Angesichts der flachen Architektur von Geschäften sind „namespaced“-Geschäfte Teil ihrer Definition, und man könnte sagen, dass alle Geschäfte einen Namensraum haben.
Migration from Vuex Guide.
Weitere Kenntnisse zum Thema Programmierung finden Sie unter:Einführung in die Programmierung! !
Das obige ist der detaillierte Inhalt vonWas heißt Pinia? Wie verwende ich es in Vue?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Die Verwendung von Bootstrap in Vue.js ist in fünf Schritte unterteilt: Startstrap installieren. Bootstrap in main.js. Verwenden Sie die Bootstrap -Komponente direkt in der Vorlage. Optional: benutzerdefinierter Stil. Optional: Verwenden Sie Plug-Ins.

Sie können der VUE -Taste eine Funktion hinzufügen, indem Sie die Taste in der HTML -Vorlage an eine Methode binden. Definieren Sie die Methode und schreiben Sie die Funktionslogik in der VUE -Instanz.

Mit der Watch -Option in Vue.js können Entwickler auf Änderungen in bestimmten Daten anhören. Wenn sich die Daten ändert, löst sich eine Rückruffunktion aus, um Aktualisierungsansichten oder andere Aufgaben auszuführen. Zu den Konfigurationsoptionen gehören unmittelbar, die festlegen, ob ein Rückruf sofort ausgeführt werden soll, und Deep, das feststellt, ob Änderungen an Objekten oder Arrays rekursiv anhören sollen.

VUE Multi-Page-Entwicklung ist eine Möglichkeit, Anwendungen mithilfe des Vue.js-Frameworks zu erstellen, in dem die Anwendung in separate Seiten unterteilt ist: Code-Wartung: Die Aufteilung der Anwendung in mehrere Seiten kann das Verwalten und Wartungsbereich erleichtern. Modularität: Jede Seite kann als separates Modul für eine einfache Wiederverwendung und den Austausch verwendet werden. Einfaches Routing: Die Navigation zwischen Seiten kann durch einfache Routing -Konfiguration verwaltet werden. SEO -Optimierung: Jede Seite hat eine eigene URL, die SEO hilft.

Es gibt drei Möglichkeiten, sich auf JS -Dateien in Vue.js zu beziehen: Geben Sie den Pfad direkt mit dem & lt; Skript & gt an. Etikett;; Dynamischer Import mit dem montierten () Lebenszyklushaken; und importieren über die Vuex State Management Library.

VUE.JS hat vier Methoden, um zur vorherigen Seite zurückzukehren: $ router.go (-1) $ router.back () verwendet & lt; Router-Link to = & quot;/& quot; Komponentenfenster.history.back () und die Methodenauswahl hängt von der Szene ab.

Es gibt drei gängige Methoden für Vue.js, um Arrays und Objekte zu durchqueren: Die V-für-Anweisung wird verwendet, um jedes Element zu durchqueren und Vorlagen zu rendern; Die V-Bind-Anweisung kann mit V-für dynamisch Attributwerte für jedes Element verwendet werden. und die .MAP -Methode kann Array -Elemente in Neuarrays umwandeln.

Es gibt zwei Möglichkeiten, Divelemente in Vue zu springen: Verwenden Sie Vue Router und fügen Sie Router-Link-Komponente hinzu. Fügen Sie den @click Event -Listener hinzu und nennen Sie dies. $ Router.push () Methode zum Springen.
