vue3.2语法糖中vuex的应用

1,475 阅读1分钟

Vue3.2 + ts 中使用 vuex

一般用法

直接store.state.msg和监听都可以让vuex的值成为响应式

<!--某vue文件-->
<template>
{{store.state.msg}}
{{msg}}
</template><script setup lang="ts">
import { isRef, computed } from 'vue'
import {useStore} from 'vuex'
const store = useStore()
const msg = computed(()=>store.state.msg)
setTimeout(()=>{store.commit('setMsg','abc')},3000) //调用mutations
</script>

module模块化的用法

// ./one/index.ts
interface State  {
    msg:string
}
​
const one = {
    namespaced:true, //让这里的东西独立成模块,不然mutations等都会和根state的合并
    state:{
        msg:'one hello'
    },
    mutations: {
        setMsg(state:State, str:string) {
            state.msg = str
        }
    }
}
​
export {one}
// index.ts
import {createStore} from 'vuex'
import {one} from './one/index'
​
export const store = createStore({
    state:{
        msg:'storeData'
    },
    mutations:{
        setMsg(state, str:string) {
            state.msg = str
        }
    },
    strict:true,//开启严格模式,只有在mutation中才可以更改state
    modules:{
        one
    }
})
<template>
{{store.state.msg}}
{{msg}}
{{store.state.one.msg}}
</template><script setup lang="ts">
import {computed } from 'vue'
import {useStore, mapState} from 'vuex'
const store = useStore()
const msg = computed(()=>store.state.msg)
setTimeout(() => {store.commit('setMsg','abc')},3000)
setTimeout(() => {store.commit('one/setMsg','def')},3000)
</script>

往期回顾:

Vue语法糖 setup 知识点合集 - 掘金 (juejin.cn)

Vue3中emits和attrs的区别 - 掘金 (juejin.cn)

Vue3中provide/inject 和expose/import的差别 - 掘金 (juejin.cn)

不要一直用div啦!语义化标签了解下? - 掘金 (juejin.cn)

WebSocket指南:5分钟带你写一个小型的双端通信 - 掘金 (juejin.cn)

就这样,喜欢可以关注一下,拜拜!🥳