vue3學(xué)習(xí)筆記 -- vuex4

vuex4 是 vue3的兼容版本炉峰,提供了和vuex3 的相同API畏妖。因此我們可以在 vue3 中復(fù)用之前已存在的 vuex 代碼。

一疼阔、安裝以及初始化

vuex4安裝:

npm install vuex@next

npminstall vuex@next

為了向vue3初始化方式看齊戒劫,vuex4 初始化方式做了相應(yīng)的變化,使用新的 createStore 函數(shù)創(chuàng)建新的 store 實例婆廊。

import { createApp } from 'vue'

import App from './App.vue'

import router from './router'

import { createStore } from "vuex"

const store = createStore({

state(){ return{ num:1, } }

})

const app = createApp(App)

app.use(router)

app.use(store)

app.mount('#app')

//在組件內(nèi)使用時與之前一樣

<div>{{$store.state.num}}</div>

二迅细、vuex4在組件內(nèi)的使用

2.1、使用場景1

在組件的模板中直接使用淘邻,與之前的api保持一致

// 在 main.js 內(nèi)

const store = createStore({

state(){

return{ num:1, }

},

mutations:{

addNum(state){

state.num++

}

},

actions:{},

modules:{}

})

//組件內(nèi)

<div> {{$store.state.num}}

?<button @click="$store.commit('addNum')">num自加</button>

</div>

2.2茵典、使用場景2

通過 useStore 把store 引入組件內(nèi),然后操作 store 宾舅。

<template>

<div>

store組件 {{state.num}}

<button @click="add">num自加</button>

</div>

</template>

<script>

import { useStore } from "vuex"

export default {

setup(){

const store = useStore()

return{

state:store.state,

add(){

store.commit('addNum')

}

}

}

} </script>

store組件? {{state.num}}num自加
import{ useStore }from"vuex"exportdefault{ setup(){conststore = useStore()return{state:store.state,? add(){? ? store.commit('addNum')? }? } }}

2.3统阿、使用場景3

store 內(nèi)使用到多個值時彩倚,可以通過 toRefs 方法,將 store.state 內(nèi)的數(shù)據(jù)直接展開扶平。

<template>

<div> {{num}} <button @click="add">num自加</button> </div>

</template>

<script>

import { useStore } from 'vuex'

import { toRefs } from "vue"

export default {

setup(){

const store = useStore()

return{

...toRefs(store.state),

add(){

store.commit('addNum')

}

} } } </script>

{{num}}num自加
import{ useStore }from'vuex'import{ toRefs }from"vue"exportdefault{ setup(){conststore = useStore()return{? ...toRefs(store.state),? add(){? ? store.commit('addNum')? }? } }}

三帆离、 getters 的用法

與之前的用法保持一致:

const store = createStore({

state(){ return{ num:1, } },

getters:{

doubleNum(state){ return state.num*2 }

}

})

//使用1:直接在template中使用

<template> {{$store.getters.doubleNum}} </template>

//使用2:利用計算屬性獲取

<template>

<div> {{getDouble}} </div>

</template>

<script>

import { useStore } from "vuex"

import { computed } from 'vue'

export default {

setup(){

const store = useStore()

return{

state:store.state,

getDouble:computed(()=>store.getters.doubleNum)

} } } </script>

{{getDouble}}
import{ useStore }from"vuex"import{ computed }from'vue'exportdefault{ setup(){conststore = useStore()return{state:store.state,getDouble:computed(()=>store.getters.doubleNum)? } }}

四、mutations 和 actions 的用法

調(diào)用 mutations 內(nèi)的方法時结澄,使用 commit 調(diào)用哥谷。上述的使用場景2 就是 mutations 方法的調(diào)用。

而 actions 異步更新 state 中的數(shù)據(jù)麻献,還是需要經(jīng)過 mutations 们妥。

<template>

<div> {{state.num}} <button @click="asyncUpdateNum">更新num</button>

</div>

</template>

<script>

import { useStore } from "vuex"

export default {

setup(){

const store = useStore()

return{

state:store.state,

asyncUpdateNum(){

store.dispatch('updateNum',88)

} } } } </script>

{{state.num}}更新num
import{ useStore }from"vuex"exportdefault{ setup(){conststore = useStore()return{state:store.state,? asyncUpdateNum(){? store.dispatch('updateNum',88)? }? } }}

組件內(nèi)可以通過 this.$store 屬性訪問store容器,使用?composition API 可以通過 useStore代替勉吻。其他的用法基本相同监婶。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末嫁赏,一起剝皮案震驚了整個濱河市掺炭,隨后出現(xiàn)的幾起案子溯警,更是在濱河造成了極大的恐慌闽晦,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件睬捶,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)踩娘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來喉祭,“玉大人养渴,你說我怎么就攤上這事》豪樱” “怎么了理卑?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蔽氨。 經(jīng)常有香客問我藐唠,道長,這世上最難降的妖魔是什么鹉究? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任宇立,我火速辦了婚禮,結(jié)果婚禮上自赔,老公的妹妹穿的比我還像新娘妈嘹。我一直安慰自己,他們只是感情好绍妨,可當(dāng)我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布润脸。 她就那樣靜靜地躺著柬脸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪毙驯。 梳的紋絲不亂的頭發(fā)上倒堕,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天,我揣著相機(jī)與錄音尔苦,去河邊找鬼涩馆。 笑死,一個胖子當(dāng)著我的面吹牛允坚,可吹牛的內(nèi)容都是我干的魂那。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼稠项,長吁一口氣:“原來是場噩夢啊……” “哼涯雅!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起展运,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤活逆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后拗胜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蔗候,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年埂软,在試婚紗的時候發(fā)現(xiàn)自己被綠了锈遥。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡勘畔,死狀恐怖所灸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情炫七,我是刑警寧澤爬立,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站万哪,受9級特大地震影響侠驯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜奕巍,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一陵霉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧伍绳,春花似錦踊挠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽睹酌。三九已至,卻和暖如春剩檀,著一層夾襖步出監(jiān)牢的瞬間憋沿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工沪猴, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留辐啄,地道東北人。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓运嗜,卻偏偏與公主長得像壶辜,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子担租,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內(nèi)容