真的需要 Pinia 嗎?
最近在想一個(gè)問題:在 Vue3 項(xiàng)目中,進(jìn)行狀態(tài)管理的時(shí)候,我們真的需要 Pinia 嗎?uwf28資訊網(wǎng)——每日最新資訊28at.com
其實(shí)我們可以反過來想一個(gè)問題:沒有 Pinia,我們能做狀態(tài)管理嗎?uwf28資訊網(wǎng)——每日最新資訊28at.com
答案是:可以!!!uwf28資訊網(wǎng)——每日最新資訊28at.com
ref、reactive
Vue3 的一些 API 對比 React 的好處就是,這些 API 并不一定需要在組件中去聲明。uwf28資訊網(wǎng)——每日最新資訊28at.com
就比如你想要做局部狀態(tài)管理的時(shí)候,可以直接使用 reactive、ref 這類 API 來完成。uwf28資訊網(wǎng)——每日最新資訊28at.com
圖片uwf28資訊網(wǎng)——每日最新資訊28at.com
uwf28資訊網(wǎng)——每日最新資訊28at.com
圖片uwf28資訊網(wǎng)——每日最新資訊28at.com
uwf28資訊網(wǎng)——每日最新資訊28at.com
圖片uwf28資訊網(wǎng)——每日最新資訊28at.com
uwf28資訊網(wǎng)——每日最新資訊28at.com
這樣能達(dá)到局部狀態(tài)管理,多組件共用同一個(gè)狀態(tài)的效果,請看下圖:uwf28資訊網(wǎng)——每日最新資訊28at.com
圖片uwf28資訊網(wǎng)——每日最新資訊28at.com
uwf28資訊網(wǎng)——每日最新資訊28at.com
effectScope
Vue3 有一個(gè)超級(jí)冷門的 API 叫 effectScope ,這個(gè) API 非常強(qiáng)大,但是很多人都不知道它。uwf28資訊網(wǎng)——每日最新資訊28at.com
當(dāng)然,既然很少人知道它,那自然就很少人知道,Pinia 的底層原理就是依賴了 effectScope。uwf28資訊網(wǎng)——每日最新資訊28at.com
圖片uwf28資訊網(wǎng)——每日最新資訊28at.com
uwf28資訊網(wǎng)——每日最新資訊28at.com
既然 Pinia 是通過effectScope來實(shí)現(xiàn)的,那么,我們自然也可以直接使用這個(gè) API 來做狀態(tài)管理!uwf28資訊網(wǎng)——每日最新資訊28at.com
其實(shí)已經(jīng)有人做過這件事了,就比如 vueuse 中的。uwf28資訊網(wǎng)——每日最新資訊28at.com
圖片uwf28資訊網(wǎng)——每日最新資訊28at.com
uwf28資訊網(wǎng)——每日最新資訊28at.com
我們可以直接用這個(gè) Hooks 來進(jìn)行狀態(tài)管理,如果是使用 effectScope 來進(jìn)行管理的話,狀態(tài)就不需要寫在 Hooks 外部了,因?yàn)?effectScope 內(nèi)部邏輯只會(huì)執(zhí)行一次,無論你調(diào)用多少次。uwf28資訊網(wǎng)——每日最新資訊28at.com
圖片uwf28資訊網(wǎng)——每日最新資訊28at.com
uwf28資訊網(wǎng)——每日最新資訊28at.com
圖片uwf28資訊網(wǎng)——每日最新資訊28at.com
uwf28資訊網(wǎng)——每日最新資訊28at.com
圖片uwf28資訊網(wǎng)——每日最新資訊28at.com
uwf28資訊網(wǎng)——每日最新資訊28at.com
利用 effectScope 也能達(dá)到組件之間共享狀態(tài)!uwf28資訊網(wǎng)——每日最新資訊28at.com
圖片uwf28資訊網(wǎng)——每日最新資訊28at.com
uwf28資訊網(wǎng)——每日最新資訊28at.com
那還需要 Pinia 嗎?
結(jié)構(gòu)分明
我覺得 Pinia 還是有他的好處的,好處就是:讓我們少寫一些代碼,并且代碼更加分明。uwf28資訊網(wǎng)——每日最新資訊28at.com
比如下面這個(gè)例子:uwf28資訊網(wǎng)——每日最新資訊28at.com
- state: 定義狀態(tài)
- getter: 定義計(jì)算變量
- action: 定義修改方法
結(jié)構(gòu)很分明:uwf28資訊網(wǎng)——每日最新資訊28at.com
圖片uwf28資訊網(wǎng)——每日最新資訊28at.com
uwf28資訊網(wǎng)——每日最新資訊28at.com
監(jiān)聽 state
Pinia 還提供了 $subscribe 來監(jiān)聽整個(gè)狀態(tài),我們也可以利用這個(gè)方法來做持久化存儲(chǔ)。uwf28資訊網(wǎng)——每日最新資訊28at.com
uwf28資訊網(wǎng)——每日最新資訊28at.com
uwf28資訊網(wǎng)——每日最新資訊28at.com
插件機(jī)制
Pinia 提供了插件機(jī)制,可以讓你去拓展 Pinia 的功能,以下是你可以擴(kuò)展的內(nèi)容:uwf28資訊網(wǎng)——每日最新資訊28at.com
- 為 store 添加新的屬性
- 定義 store 時(shí)增加新的選項(xiàng)
- 為 store 增加新的方法
- 包裝現(xiàn)有的方法
- 改變甚至取消 action
- 實(shí)現(xiàn)副作用,如本地存儲(chǔ)
- 僅應(yīng)用插件于特定 store
比如舉個(gè)小例子,給所有狀態(tài)管理都加一個(gè)屬性變量。uwf28資訊網(wǎng)——每日最新資訊28at.com
uwf28資訊網(wǎng)——每日最新資訊28at.com
uwf28資訊網(wǎng)——每日最新資訊28at.com
Pinia 著名的持久化插件pinia-plugin-persistedstate就是利用了 Pinia 的插件機(jī)制。uwf28資訊網(wǎng)——每日最新資訊28at.com
uwf28資訊網(wǎng)——每日最新資訊28at.com
uwf28資訊網(wǎng)——每日最新資訊28at.com
他的核心代碼其實(shí)很少,就是利用插件機(jī)制,使用$subscribe去監(jiān)聽每一個(gè)狀態(tài)管理的變化,然后進(jìn)行持久化存儲(chǔ)!uwf28資訊網(wǎng)——每日最新資訊28at.com
圖片 uwf28資訊網(wǎng)——每日最新資訊28at.com
本文鏈接:http://www.tebozhan.com/showinfo-26-98686-0.html為什么有些 Vue3 項(xiàng)目已經(jīng)開始棄用 Pinia 了?
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com
上一篇: 上海啟動(dòng)未成年人網(wǎng)絡(luò)環(huán)境整治專項(xiàng)行動(dòng):重點(diǎn)整治網(wǎng)絡(luò)暴力、網(wǎng)絡(luò)語言污染風(fēng)氣等突出問題
下一篇: 小猿學(xué)練機(jī)攜最新 AI 大模型應(yīng)用成果亮相世界人工智能大會(huì)