Vue項(xiàng)目中是否使用store原理深究
前言
關(guān)于 Vue 項(xiàng)目中是否使用 store 的一些思考?
為什么會(huì)有這個(gè)問(wèn)題呢?
最近做項(xiàng)目的時(shí)候,使用 pinia 作為狀態(tài)管理庫(kù),翻看 pinia 文檔的時(shí)候,發(fā)現(xiàn) pinia 創(chuàng)建 store 多了一種 setup store 的方式
setup store
const useStore = defineStore('store', () => {
const status = ref(false);
const setStatus = () => {
status.value = !status.value;
};
const number = computed(() => Number(status.value));
return {
status,
setStatus,
number,
};
});
setup store 與 vue 的 響應(yīng)式 api 結(jié)合在一起使用,相較于原先的 選項(xiàng)式 api 統(tǒng)一了語(yǔ)法,更符合開(kāi)發(fā)者習(xí)慣
使用 store:
const store = useStore() console.log(store.status); // false console.log(store.number); // 0 store.setStatus(); console.log(store.status); // true console.log(store.number); // 1
這樣的寫法很棒!
但是我們?yōu)槭裁匆啻我慌e使用 store,為何不在其他文件直接使用 組合式 api 定義數(shù)據(jù)和修改數(shù)據(jù)的方法,非要包裹一層創(chuàng)建 store 的過(guò)程
const status = ref(false);
const setStatus = () => {
status.value = !status.value;
};
export { status, setStatus };
在其他的組件中直接將 status 和 setStatus 引入,這樣寫法比 setup store 還要簡(jiǎn)單
那使用 store 的意義是什么呢 ?
兩種方式的區(qū)別
為什么要引入 store,大多數(shù)情況都是為了 全局狀態(tài)管理,方便了 跨組件通信,但是直接使用 組合式 api 也能完成這個(gè)任務(wù)。
這兩種方式有什么區(qū)別呢?
如果引入其他文件中定義的 簡(jiǎn)單數(shù)據(jù)類型 是 不允許修改 的
// 第一個(gè)文件
export let num = 0;
// 第二個(gè)文件
import { num } from '.';
num++; // error
import 為當(dāng)前模塊引入的變量都會(huì)被視作為 常量
setup store 相比 組合式 api 擁有更強(qiáng)大的地方:
const useStore = defineStore('store', () => {
const num1 = ref(0);
const num2 = 0; // 非響應(yīng)式
return {
num1,
num2,
};
});
const store = useStore();
store.num1++;
store.num2++; // 響應(yīng)式
console.log(store.num1); // 1
console.log(store.num2); // 1
基本數(shù)據(jù)類型和響應(yīng)式數(shù)據(jù)都可以更改,基本數(shù)據(jù)可以修改,也可以引起視圖的變化,在 store 外部調(diào)用是響應(yīng)式的,但在 store 內(nèi)部不是響應(yīng)式的,但是不會(huì)被 pinia Devtools 工具檢測(cè)到

這是兩種方式在使用體驗(yàn)上面的區(qū)別
store 究竟帶來(lái)了什么?
在 Pinia 官網(wǎng) 中有這么一段話

在很多時(shí)候,其實(shí)是體驗(yàn)不到 pinia 帶來(lái)的好處,所以可以完全使用 組合式 api 作為全局狀態(tài)管理的工具
以上就是Vue項(xiàng)目中是否使用store原理深究的詳細(xì)內(nèi)容,更多關(guān)于Vue項(xiàng)目store使用原理的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Vue3子組件向父組件傳值的兩種實(shí)現(xiàn)方式
近期學(xué)習(xí)vue3的父子組件之間的傳值,發(fā)現(xiàn)跟vue2的并沒(méi)有太大的區(qū)別,這篇文章主要給大家介紹了關(guān)于Vue3子組件向父組件傳值的兩種實(shí)現(xiàn)方式,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-04-04
vue常用指令實(shí)現(xiàn)學(xué)生錄入系統(tǒng)的實(shí)戰(zhàn)
本文主要介紹了vue常用指令實(shí)現(xiàn)學(xué)生錄入系統(tǒng)的實(shí)戰(zhàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02
Vue.js一個(gè)文件對(duì)應(yīng)一個(gè)組件實(shí)踐
Vue.js實(shí)現(xiàn)"一個(gè)文件對(duì)應(yīng)一個(gè)組件",無(wú)需webpack等工具,按需加載組件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10
vue利用Moment插件格式化時(shí)間的實(shí)例代碼
Moment.js 是一個(gè) JavaScript 日期處理類庫(kù),用于解析、檢驗(yàn)、操作、以及顯示日期。這篇文章主要給大家介紹了關(guān)于vue利用Moment插件格式化時(shí)間的相關(guān)資料,需要的朋友可以參考下2021-05-05
在vue項(xiàng)目中使用Nprogress.js進(jìn)度條的方法
NProgress.js是輕量級(jí)的進(jìn)度條組件,使用簡(jiǎn)便,可以很方便集成到單頁(yè)面應(yīng)用中。這篇文章主要介紹了在vue項(xiàng)目中使用Nprogress.js進(jìn)度條的方法,需要的朋友可以參考下2018-01-01
Vue + iView實(shí)現(xiàn)Excel上傳功能的完整代碼
前一段時(shí)間項(xiàng)目經(jīng)歷了前端上傳文件的過(guò)程,首先進(jìn)入頁(yè)面會(huì)展示默認(rèn)的樣子,選中要上傳的excel文件,本文通過(guò)實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),需要的朋友參考下吧2021-06-06
Vue?響應(yīng)式系統(tǒng)依賴收集過(guò)程原理解析
Vue 初始化時(shí)就會(huì)通過(guò) Object.defineProperty 攔截屬性的 getter 和 setter ,為對(duì)象的每個(gè)值創(chuàng)建一個(gè) dep 并用 Dep.addSub() 來(lái)存儲(chǔ)該屬性值的 watcher 列表,這篇文章主要介紹了Vue?響應(yīng)式系統(tǒng)依賴收集過(guò)程分析,需要的朋友可以參考下2022-06-06
vue.js移動(dòng)數(shù)組位置,同時(shí)更新視圖的方法
下面小編就為大家分享一篇vue.js移動(dòng)數(shù)組位置,同時(shí)更新視圖的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-03-03

