vue3學(xué)習筆記 -- 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)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容