日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Vue3狀態管理的使用詳解

瀏覽:38日期:2022-09-30 13:42:44
背景

隨著Vue3的逐步應用,對狀態管理的需求越來越多。起初是基于Vuex4進行狀態管理的,但是Vuex4也暴露了一些問題。從個人角度來說,Vuex4類似于過渡期產品,對TypeScript的支持性并不完整。如果使用TypeScript編寫組件,需要遵循一定步驟后,才可以正確進行類型推斷,并且對modules的使用上也并不友好。Vuex核心貢獻者Kia King也表示Vuex5已經在計劃中,并且能提供完整的TypeScript支持,那么在Vuex5面世之前,或者直接'舍棄'Vuex的話有沒有其他狀態管理的方案?

Provide / Inject

provide和inject并不是Vue3的新特性,在Vue2中就已經存在了。文檔中提到provide和inject綁定并不是可響應的。然而,如果你傳入了一個可監聽的對象,那么其對象的property還是可響應的。

Vue3在Computed與watch的基礎上新增了響應性API ref和reactive,可以更加方便provide和inject的應用,再結合Composition API的思想,是否能實現一個簡易版的狀態管理?

Vue3狀態管理的使用詳解

抽離共享狀態

// src/context/calculator.tsimport { ref, inject, provide, readonly } from ’vue’;type Calculator = { count: number; increase: () => void; updateCount: (num: number) => void;};//provide的key,唯一令牌const CalculatorSymbol = Symbol();//提供者export const calculatorProvide = () => { //數目 const count = ref<number>(1); //遞增方法 const increase = () => {count.value++; }; //更新方法 const updateCount = (num: number) => {count.value = num; }; //提供的共享狀態對象 const depends = {count: readonly(count), //狀態只讀,通過方法進行修改increase,updateCount }; //使用provide api實現狀態對象提供 provide(CalculatorSymbol, depends); //返回狀態對象,讓同級可調用 return depends;};//注入方法export const calculatorInject = () => { //使用inject api注入狀態 const calculatorContext = inject<Calculator>(CalculatorSymbol); //未共享就注入的錯誤校驗 if (!calculatorContext) {throw new Error(’Inject must be used affer Provide’); } //返回注入的貢獻狀態 return calculatorContext;};提供數據

相比起Vuex的全局共享,利用Provide / Inject可以實現全局或者局部共享,

全局共享,可以在main.ts中注入全局狀態:

// src/main.tsimport { createApp, h } from ’vue’;import App from ’@/App.vue’;import { calculatorProvide } from ’@/context/calculator’;// 創建vue實例const app = createApp({ setup() {calculatorProvide();return () => h(App); }});// 掛載實例app.mount(’#app’);

如果只想局部共享,可以在父組件中注入狀態

// src/views/parent.vueimport { defineComponent } from 'vue';import { calculatorProvide } from ’@/context/calculator’;export default defineComponent({ name: 'parent', setup() { //共享數據 calculatorProvide(); }});注入數據

子組件可以通過狀態注入,使用或修改狀態

// src/views/child.vueimport { defineComponent } from 'vue';import { calculatorInject } from ’@/context/calculator’;export default defineComponent({ name: 'child', setup() { //注入數據 const { count, increase, updateCount } = calculatorInject(); }});小結

實際上,你可以將依賴注入(Provide / Inject)看作是'long range props',除了:

父組件不需要知道哪些子組件使用它provide的property 子組件不需要知道inject的property來自哪里

Vue3使依賴注入的使用更加靈活便捷,以此仿造了小型的狀態管理,個人測試上,對TypeScript的支持性比較完整

reactive

那么不使用Provide / Inject,還有別的方法可以實現狀態管理嗎?直接上代碼。

抽離共享狀態

// src/context/calculator.tstype Calculator = { count: number; increase: () => void; updateCount: (num: number) => void;};//共享狀態const calculatorStore = reactive<Calculator>({ count: 1, increase: () => {calculatorStore.count++; }, updateCount: (num: number) => {calculatorStore.count = num; }});export { calculatorStore };使用共享狀態

使用狀態的方法很簡單,只需要import狀態即可,需要使用狀態的組件,都需要導入

// src/views/any.vueimport { defineComponent } from 'vue';import { calculatorStore } from ’@/context/calculator’;export default defineComponent({ name: 'any', setup() { console.log(calculatorStore.count); }});小結

其實這個方案利用的是reactive的響應性及import同一實例原理,相比起依賴注入來的更簡單粗暴,也能正確支持TypeScript校驗。但是依賴注入可以在不同根節點共享不同的數據,而這個reactive方案永遠共享的是一個實例,在某些業務場景下并不適用。

結語

首先,Vuex仍舊是更成熟全面的方案,只是針對一些簡單的狀態管理,可以嘗試換個思路解決;當然以上的方案可能還有很多考慮不全地方,歡迎各位大神指點指點~

以上就是Vue3狀態管理的使用詳解的詳細內容,更多關于Vue3狀態管理的使用的資料請關注好吧啦網其它相關文章!

標簽: Vue
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久免费黄色| 欧美日韩视频免费看| 青草av.久久免费一区| 中文亚洲欧美| 免费欧美一区| 成人三级高清视频在线看| 麻豆视频一区| 欧美日一区二区在线观看| 91亚洲无吗| 久久国产麻豆精品| 日韩激情av在线| 日韩精品亚洲专区| 亚洲一级大片| 日韩一区二区三区高清在线观看| 麻豆亚洲精品| 蜜桃久久久久久| 午夜宅男久久久| 亚州国产精品| 日韩和欧美一区二区三区| 日韩国产在线观看| 91成人小视频| 欧美久久久网站| 精品视频一区二区三区四区五区 | 免费看久久久| 成人精品高清在线视频| 三级在线看中文字幕完整版| 日韩专区精品| 日韩视频二区| 亚洲精品乱码| 国产精品www994| 国产福利片在线观看| 亚洲www啪成人一区二区| 亚洲国产成人精品女人| 亚洲一区二区三区久久久| 欧美一级网站| 水蜜桃久久夜色精品一区| 久久婷婷激情| 水蜜桃久久夜色精品一区的特点| 午夜亚洲福利| 麻豆免费精品视频| 久久天堂精品| 日韩一区精品| 国产成人在线中文字幕| 午夜欧美精品久久久久久久| 亚洲精品乱码久久久久久蜜桃麻豆| 清纯唯美亚洲综合一区| 精品中国亚洲| 九一成人免费视频| 国产日韩欧美中文在线| 亚洲一级少妇| 亚洲欧洲日韩| 黄色网一区二区| 欧美日韩国产高清| 日韩av不卡在线观看| av高清不卡| 蜜臀91精品一区二区三区| 国产精品三级| 国产精品99免费看| 午夜天堂精品久久久久| 精品国产乱码久久久| 夜夜嗨网站十八久久| 国产乱码精品一区二区三区亚洲人| 国产精品精品国产一区二区| 日韩精品一级中文字幕精品视频免费观看 | 亚洲成人av观看| 天使萌一区二区三区免费观看| 国产免费久久| 欧美久久精品一级c片| 91精品丝袜国产高跟在线| 中文字幕系列一区| 亚洲精品无播放器在线播放| 久久精品国产精品亚洲毛片| 中文日韩在线| 丁香婷婷久久| 亚洲免费观看高清完整版在线观| 国产高清不卡| 日韩av字幕| 在线国产一区| 国产精品不卡| 日韩和欧美一区二区| 99久久亚洲精品蜜臀| 欧美日韩调教| 蜜桃av一区| 日韩精品一区二区三区免费观影 | 亚洲中字黄色| 中文一区一区三区高中清不卡免费| 亚洲色图网站| 极品日韩av| 国产资源在线观看入口av| 日韩高清一区二区| 好看的av在线不卡观看| 国产精品成久久久久| 青青草国产精品亚洲专区无| 亚洲欧美日本日韩| 久久精品中文| 精品国产鲁一鲁****| 国产麻豆一区二区三区| 亚洲一区二区小说| 亚洲男女av一区二区| 色婷婷色综合| 国产欧美一区二区色老头| 蜜臀a∨国产成人精品| 亚洲国产综合在线看不卡| 精品国产18久久久久久二百| 欧美日韩亚洲一区二区三区在线| 久久亚洲图片| 国产偷自视频区视频一区二区| 日韩专区精品| 国产福利电影在线播放| 国产精品v一区二区三区| 日本vs亚洲vs韩国一区三区二区| 在线亚洲一区| 九九久久电影| 99久久99久久精品国产片果冰 | 亚洲视频二区| 伊人久久亚洲美女图片| 久久久久午夜电影| 成人午夜毛片| 欧美激情99| 欧美国产另类| 免费看久久久| 国产中文字幕一区二区三区| 欧美精品99| 国产日韩三级| 国产精品尤物| 国产精品久久久久久久久久白浆| 久久亚洲欧洲| 六月婷婷一区| 免费看的黄色欧美网站| 亚洲综合三区| 视频一区中文字幕| 国产亚洲毛片| 手机精品视频在线观看| 丝袜美腿一区二区三区| 伊人www22综合色| 四虎成人精品一区二区免费网站 | 国产麻豆综合| 亚洲一二三区视频| 亚洲精品无播放器在线播放| 日韩亚洲精品在线观看| 日本不卡视频在线| 7777精品| 免费在线亚洲欧美| 电影91久久久| 精精国产xxxx视频在线播放 | 久久精品二区亚洲w码| 精品一区电影| 亚洲成av在线| 9久re热视频在线精品| 亚洲综合小说| 国产日韩一区| 精品国产第一福利网站| 免费欧美一区| 亚洲涩涩av| 国产日韩一区| 神马午夜在线视频| 久久中文字幕二区| 视频一区在线视频| 国产伦理久久久久久妇女| 精品国产乱码久久久久久1区2匹| 免费在线小视频| 国产精品社区| 91成人在线精品视频| 国产一区二区三区四区五区传媒| 日韩在线短视频| 美女91精品| 国产伦理久久久久久妇女| 日韩理论视频| 在线国产一区| 日韩欧美中文字幕一区二区三区| 国产精品三p一区二区| 中文在线中文资源| 国产精品美女久久久浪潮软件| 日韩精品国产欧美| 国产aⅴ精品一区二区四区| 欧美成人国产| 青青国产91久久久久久| 日韩在线观看| 综合激情网站| 国产一区二区三区免费在线| 一区在线免费观看| 国产精品久久久久久久久久妞妞 | 亚洲精品字幕| 精品视频高潮| 9久re热视频在线精品| 欧美精品影院| 香蕉久久99| 国产精选一区| 成人av二区| 国产欧美大片| 欧美日韩国产高清| 你懂的国产精品| 日韩亚洲国产欧美| 精品国产三区在线| 国产精品三上| 精品中文字幕一区二区三区| 黑丝一区二区| 精品久久久中文字幕| 国产亚洲毛片在线| 久久精品国产精品亚洲毛片|