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

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

Vue3狀態管理的使用詳解

瀏覽:48日期: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影院| 国产精品a级| 91视频一区| 久久视频国产| 在线视频精品| 夜夜嗨网站十八久久| 免费视频最近日韩| 国产欧美日韩综合一区在线播放| 久久精品网址| 欧美gv在线| 伊人久久成人| 欧美久久亚洲| 日韩a一区二区| 亚洲精华国产欧美| 91大神在线观看线路一区| 免费在线成人| 久久久亚洲一区| 亚洲图片久久| 欧美韩一区二区| 久久黄色影院| 鲁大师成人一区二区三区| 欧美日韩18| 九九色在线视频| 天使萌一区二区三区免费观看| 日韩欧美中文字幕在线视频| 精品一区二区三区免费看 | 免费人成在线不卡| 国产毛片精品| 日韩不卡视频在线观看| 丝袜脚交一区二区| 久久精品亚洲一区二区| 久久九九99| 日本精品在线播放| 波多野结衣久久精品| 三级一区在线视频先锋| 美女性感视频久久| 欧美精品一区二区三区精品| 日本综合精品一区| 日韩欧美1区| 日韩一区网站| 日本少妇一区| 欧美日韩亚洲一区二区三区在线| а√天堂8资源中文在线| 另类国产ts人妖高潮视频| 麻豆视频一区二区| 美女久久网站| 国产成人免费视频网站视频社区| 午夜在线播放视频欧美| 国产激情一区| 老鸭窝亚洲一区二区三区| 成人亚洲精品| 日韩专区视频网站| 久久久久免费av| 国产伦精品一区二区三区千人斩 | 亚洲一区二区三区久久久| 国产福利亚洲| 每日更新成人在线视频| 国精品产品一区| 免费在线视频一区| 97精品国产福利一区二区三区| 亚洲影院天堂中文av色| 麻豆精品蜜桃| 精品一区二区三区四区五区| 亚洲色图综合| 精品中文字幕一区二区三区av| 国产精品一国产精品| 国产手机视频一区二区| 日韩深夜视频| 国产精品嫩模av在线| 欧美中文字幕| 亚洲人成在线网站| 国产日韩欧美一区二区三区在线观看 | 久久字幕精品一区| 国产毛片一区| 999国产精品视频| 精品日产乱码久久久久久仙踪林| 亚洲另类视频| 国产一区亚洲| 国产资源在线观看入口av| 国产欧美一区二区三区国产幕精品| 国产婷婷精品| 亚洲第一区色| 国产伦久视频在线观看| 国产精品久久久久77777丨| 蜜臀精品久久久久久蜜臀| 久久在线免费| 日韩和的一区二在线| 国产一区二区三区四区大秀| 日韩一区二区三区精品视频第3页| 黄色在线一区| 在线日韩一区| 亚洲福利国产| 欧美日韩免费观看视频| 国产成人久久| 精品视频在线观看网站| 久久亚洲人体| 美腿丝袜亚洲三区| 欧美偷窥清纯综合图区| 亚洲三级国产| 亚洲精品九九| 日韩精品午夜视频| 婷婷精品在线| 亚洲精品日本| 日韩美女国产精品| 日韩精品一区二区三区av | 国产日韩欧美一区二区三区| 日本成人在线一区| 日韩中文字幕在线一区| 亚洲精品黄色| 香蕉视频成人在线观看| 香蕉久久夜色精品国产| 国产亚洲亚洲| 一区二区三区网站| 国产精品视区| 亚洲精品综合| 亚洲精品乱码久久久久久蜜桃麻豆 | 红桃视频国产一区| 狠狠久久婷婷| 性色一区二区| 亚洲字幕久久| 97se亚洲| 91成人在线| 麻豆国产一区| 日韩av在线播放网址| 波多野结衣久久精品| 亚洲成av人片一区二区密柚| 激情偷拍久久| 视频一区二区中文字幕| 日韩激情中文字幕| 免费在线播放第一区高清av| 成人黄色av| 久久精品1区| 日韩视频一区| 五月激激激综合网色播| 国产精品一区高清| 成人台湾亚洲精品一区二区| 中文一区一区三区高中清不卡免费| 日韩欧美1区| 亚洲欧美高清| 国产日韩高清一区二区三区在线 | 成人看片网站| 日韩午夜免费| 日韩二区在线观看| 精品久久久亚洲| 久久激情网站| 亚洲在线久久| 精品久久美女| 99久久久久国产精品| 亚洲欧美网站在线观看| 精品入口麻豆88视频| 91久久中文| 国产乱人伦精品一区| 欧美羞羞视频| 中文字幕亚洲在线观看| 久久的色偷偷| 一区二区三区四区在线看| 亚洲精品欧美| 高清精品久久| 久久不射网站| 国产精品66| 黄色国产精品| 国产极品久久久久久久久波多结野| 国产一区二区三区四区二区| 黄色日韩在线| 欧美激情五月| 亚洲精品va| 国产精品magnet| 国产精品普通话对白| 久久亚洲精精品中文字幕| 亚洲激情欧美| 国内一区二区三区| 日本 国产 欧美色综合| 成人国产精品一区二区网站| 免费久久精品视频| 国产成人免费| 亚洲欧美专区| 久久久男人天堂| 另类国产ts人妖高潮视频| 精品欧美日韩精品| 亚洲乱码视频| 美女网站视频一区| 国产探花一区二区| 亚洲黄页一区| 国产+成+人+亚洲欧洲在线| 亚洲精品少妇| 欧美日韩精品在线一区| 国产精品日本一区二区不卡视频 | 久久精品xxxxx| 精品一区在线| 精品久久福利| 婷婷视频一区二区三区|