什麼是pinia?為什麼要使用 Pinia?這篇文章就來帶大家了解一下pinia,透過範例介紹一下pinia的基本使用方法,希望對大家有幫助!
什麼是Pinia?
Pinia最初是在 2019 年 11 月左右重新設計使用 Composition API的 Vue Store 外觀的實驗。從那時起,最初的原則仍然相同,但 Pinia 適用於 Vue 2 和 Vue 3 ,並且不需要你使用組合 API。除了安裝和SSR之外,兩者的API 都是相同的,並且這些文件針對Vue 3 ,並在必要時提供有關Vue 2 的註釋,以便Vue 2 和Vue 3 使用者可以閱讀! 【相關推薦:vue.js影片教學】
為什麼要使用 Pinia?
Pinia 是 Vue 的儲存庫,它允許您跨元件/頁面共用狀態。 ç 這對於單頁應用程式來說是正確的,但如果它是伺服器端呈現的,則會將您的應用程式暴露給安全漏洞。 但即使在小型單頁應用程式中,您也可以從使用Pinia 中獲得很多好處:
-
開發工具支援
- 追蹤動作、突變的時間表
- 商店出現在使用它們的組件中
- 時間旅行和更容易的調試
- ##熱模組更換
- 在不重新載入頁面的情況下修改您的商店
- 在開發時保持任何現有狀態
- 外掛程式:使用外掛程式擴充Pinia 功能
- 為JS 使用者提供適當的TypeScript 支援或
自動完成功能
- 伺服器端渲染支援
// 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++ }, }, })然後在元件中
使用它:
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() }, }你甚至可以使用一個函數(類似於一個元件
setup() )來為更高階的用例定義一個Store:
export const useCounterStore = defineStore('counter', () => { const count = ref(0) function increment() { count.value++ } return { count, increment } })如果您仍然不熟悉
setup()Composition API,請不要擔心,Pinia 也支援一組類似的
地圖助理,例如Vuex。您以相同的方式定義存儲,但隨後使用mapStores()、
mapState()或
mapActions():
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']), }, }您將在核心概念中找到有關每個
地圖助理的更多資訊。
為什麼選擇Pinia
Pinia(發音為/piːnjʌ/,如英文的「peenya」)是最接近
piña(西班牙語中的菠蘿)的詞,它是一個有效的包名稱。菠蘿實際上是一組單獨的花朵,它們結合在一起形成多個水果。與商店類似,每一家都是獨立誕生的,但最終都是相互連結的。它也是一種美味的熱帶水果,原產於南美洲。
中使用類型,即使在 JavaScript 中也是如此。對於某些人來說,這可能足以在不進一步閱讀的情況下開始使用,但我們仍然建議您查看文檔的其餘部分,甚至跳過此示例並在閱讀完所有核心概念後返回。
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 }) }, }, })與 Vuex 的比較Pinia 盡可能地接近 Vuex 的概念。它旨在測試 Vuex 下一次迭代的提案,並且取得了成功,因為我們目前有一個針對 Vuex 5 的開放 RFC,其 API 與 Pinia 使用
RFC
雖然 Vuex 透過 RFC 從社群收集盡可能多的回饋,但 Pinia 沒有。我根據我開發應用程式、閱讀其他人的程式碼、為使用 Pinia 的客戶工作以及在 Discord 上回答問題的經驗來測試想法。這使我能夠提供一種適用於各種情況和應用程式大小的有效解決方案。我經常發布並在保持其核心 API 不變的同時使庫不斷發展。
與Vuex 3.x/4.x 的比較
Vuex 3.x 是Vuex 的Vue 2 而Vuex 4.x 是Vue 3
Pinia API 與Vuex ≤4 有很大不同,即:
- 突變不再存在。他們經常被認為是非常冗長的。他們最初帶來了 devtools 集成,但這不再是問題。
- 無需建立自訂複雜包裝器來支援 TypeScript,所有內容都是類型化的,並且 API 的設計方式盡可能利用 TS 類型推斷。
- 不再需要注入魔法字串、導入函數、呼叫它們,享受自動完成功能!
- 無需動態新增商店,預設情況下它們都是動態的,您甚至不會注意到。請注意,您仍然可以隨時手動使用商店進行註冊,但因為它是自動的,您無需擔心。
- 不再有模組的巢狀結構。您仍然可以透過在另一個商店中匯入和使用商店來隱式嵌套商店,但 Pinia 透過設計提供平面結構,同時仍然支援商店之間的交叉組合方式。 你甚至可以有 store 的迴圈依賴。
- 沒有命名空間的模組。鑑於商店的扁平架構,「命名空間」商店是其定義方式所固有的,您可以說所有商店都是命名空間的。
有關如何將現有 Vuex ≤4 項目轉換為使用 Pinia 的更詳細說明,請參閱從 Vuex 遷移指南。
更多程式相關知識,請造訪:程式設計入門! !
以上是什麼是pinia? Vue中怎麼使用它?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Netflix主要使用React作為前端框架,輔以Vue用於特定功能。 1)React的組件化和虛擬DOM提升了Netflix應用的性能和開發效率。 2)Vue在Netflix的內部工具和小型項目中應用,其靈活性和易用性是關鍵。

Vue.js是一種漸進式JavaScript框架,適用於構建複雜的用戶界面。 1)其核心概念包括響應式數據、組件化和虛擬DOM。 2)實際應用中,可以通過構建Todo應用和集成VueRouter來展示其功能。 3)調試時,建議使用VueDevtools和console.log。 4)性能優化可通過v-if/v-show、列表渲染優化和異步加載組件等實現。

Vue.js適合小型到中型項目,而React更適用於大型、複雜應用。 1.Vue.js的響應式系統通過依賴追踪自動更新DOM,易於管理數據變化。 2.React採用單向數據流,數據從父組件流向子組件,提供明確的數據流向和易於調試的結構。

Vue.js適合中小型項目和快速迭代,React適用於大型複雜應用。 1)Vue.js易於上手,適用於團隊經驗不足或項目規模較小的情況。 2)React的生態系統更豐富,適合有高性能需求和復雜功能需求的項目。

實現 Vue 中 a 標籤跳轉的方法包括:HTML 模板中使用 a 標籤指定 href 屬性。使用 Vue 路由的 router-link 組件。使用 JavaScript 的 this.$router.push() 方法。可通過 query 參數傳遞參數,並在 router 選項中配置路由以進行動態跳轉。

Vue 中實現組件跳轉有以下方法:使用 router-link 和 <router-view> 組件進行超鏈接跳轉,指定 :to 屬性為目標路徑。直接使用 <router-view> 組件顯示當前路由渲染的組件。使用 router.push() 和 router.replace() 方法進行程序化導航,前者保存歷史記錄,後者替換當前路由不留記錄。

Vue 中 div 元素跳轉的方法有兩種:使用 Vue Router,添加 router-link 組件。添加 @click 事件監聽器,調用 this.$router.push() 方法跳轉。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

WebStorm Mac版
好用的JavaScript開發工具

Dreamweaver Mac版
視覺化網頁開發工具

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

禪工作室 13.0.1
強大的PHP整合開發環境