我們使用composition API的文法來去使用 VueX(叉)。
那麼我們先來複習一下 VueX(叉)它的一個代碼的邏輯流程,
首先我要建立一個資料,createStore 建立一個store的這樣的資料倉庫。
接着我在裡面定義state,如果我想改變state裡面資料的值的話,
首先如果異步操作,我要先通過dispatch方法派發一個action,然後執行對應的 action,action裡面去寫一些異步的操作,
action擷取到一些資料或者異步操作結束之後,它會調用 commit 方法,然後去執行一個mutation,
那麼mutation才真正的對資料做一個變更,這就是VueX(叉)它的一個使用流程。
現在我們使用composition API的文法來重新寫一下之前我們寫的功能。
代碼示例:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5SOyUzM3YTY3kTZjJTZhdzNzYzX2ETOwADM5EzLcFTMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
我在首頁要去用這個東西?
如果用composition API的文法,我們要寫一個setup函數,
setup函數裡面,我想去用 store裡面的 name 資料怎麼用?
在這裡面我們要引入一個useStore方法,
有了useStore方法之後就可以 const name 等于 balabala…。
然後去使用 store點state點name 擷取到 name 變量。
然後就 return name。
儲存,我們用name(它的值是dell,見第一張圖第三行代碼)
然後我們到首頁上來看一看,重新整理:
在首頁上 可以看到能列印出dell。
是以如果你用composition API的文法,如果想使用store裡的資料這麼用就可以了。
當然你也可以做一個解構,怎麼解構?
可以用一個import toRefs from vue。
然後花括号解構,我們這樣去寫:
我們再到頁面上刷,還是能展示出dell:
在About點vue裡面,我們也要引用對應的方法。
然後你在About點vue點選這個上面的内容的時候:
它會出現handleClick這個方法,是以我定一個handleClick方法,handleClick等于一個箭頭函數,
handleClick 我們想改變store裡面的資料怎麼改變?
比如說像同步的改變直接改變,那我直接調用store.commit,觸發一個commit這樣的送出,
我觸發送出的名字叫什麼 changeName。
store觸發了changename,這個東西調commit方法的時候,它會直接派發給誰呢?
我們找到store這個檔案:
它會直接派發給mutation,
是以這個時候我們沒有調用action,因為它是直接改變資料,
是以它會派發到mutation這一塊。
有寫過 changeName這樣的送出内容:
如果要想監聽到changeName送出的内容的話:
我要寫一個changeName這樣的方法。
當然在這裡你可以傳遞一個内容過來,比如說傳遞一個hello過去:
那麼在我們的store裡面mutation的changeName裡面,
changeName 就能接收到你傳來的str,就可以改變一下 name的值。
儲存,我們到頁面上看一下,重新整理到About頁面點一下:
這塊就變成hello了。
到Home頁面它現在還是一個hello:
因為我們現在這個store是全局的store,它裡面的資料在一個地方改變,其他地方都會生效,是以這就是 VueX(叉)強大之處。
假設我們想有一個異步方法去改變一些資料,這個時候我們就不能直接commit了,我們要dispatch派發一個異步的action出去,
比如說叫getData:
我們派發一個叫做getData這樣的 action。
在store裡面我們就可以去寫一個getData這樣的action了。
比如說名字叫做getData,
比如說這一塊我可以去遠端的接口擷取一個資料 做一個異步的操作,
當然我也可以模拟一下,比如說setTimeout 就是模拟一個請求,過兩秒鐘之後,
比如說我擷取了一個叫做hello這樣的内容:
然後我去改變store裡的資料,怎麼改變?
我直接commit一個changeName這樣的送出。
當你觸發送出的時候,mutation又能感覺到你調用了changeName,
然後這裡面又會執行這個方法,
最終我會把我的資料變成什麼?變成hello,
是以異步東西放在action裡面,真正要改資料同步的對資料的修改會放到mutation裡面去,
然後它們之間通過 commit來通信,如果你調用commit方法,直接mutations就會執行,
如果你調用dispatch方法,那麼action就會執行。
儲存,再到頁面上重新整理,到About這裡現在是dell:
我點選一下,一二兩秒鐘之後 它會變成hello:
這樣的話我們通過composition API的文法寫了一下如何去用VueX(叉)這樣的過程。
在composition API裡面,我們用到的一個核心的方法叫做useStore: