欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > Vue3 Vuex的使用

Vue3 Vuex的使用

2024/10/23 13:46:08 来源:https://blog.csdn.net/jiaoyangdetian/article/details/142787399  浏览:    关键词:Vue3 Vuex的使用

引入Vuex

        在./stores/vstore文件夹下的index.js中引入createStore,并配置全局的store

import { createStore } from "vuex";

         在main.js中引入./stores/vstore

import vstore from './stores/vstore';const app = createApp(App)app.use(vstore)export default app

数据对象的存储与读取 

        创建Vuex Strore在state中声明要存储的数据对象

export default createStore({// 数据,相当于datastate:{userinfo:{name:"Alisa",color:"yellow",age:"33"},golbalgood:{name:"pen",color:"black",num:100},populars:[{num:100, name:"one hundrerd"},{num:200, name:"two hundrerd"},{num:300, name:"three hundrerd"},{num:400, name:"four hundrerd"},]}
})

        读取state中对象的值

<template><div class="box"><div class="back"><div class="show">全局store中的userinfo的name:{{ $store.state.userinfo.name }}</div><div class="show">全局store中的golbalgood的num:{{ $store.state.golbalgood.num }}</div></div></div>
</template><script>import { useStore } from "vuex";export default{setup(props, context){const store = useStore()const popularNames = store.getters.moreTwoPopularreturn {store,popularNames,}},data(){return {}}
}</script><style lang="less" scoped>.showtxt{padding: 5px;font-size: 20px;
}.btn{background-color: cadetblue;padding: 2px 5px 2px 9px;margin: 20px;
}.back{background-color: antiquewhite;.show{padding: 5px;font-size: 20px;}
}</style>

 在mutation中改变state中数据对象的值

export default createStore({// 数据,相当于datastate:{golbalgood:{name:"pen",color:"black",num:100}},// 里边可以定义很多方法,用于操作state中的数据mutations:{changeGlobalGoodColor(state,color){state.golbalgood.color = color},changeGlobalGoodName(state, name){state.golbalgood.name = name}},
})
<template><div class="box"><h3>2 改变vuex中的数据</h3><div class="back"><div><span class="showtxt">全局store中globalgood的color:{{ $store.state.golbalgood.color}}</span><span class="btn" @click="changeGlobalGoodColor">通过commit触发mutations change</span></div><div><span class="showtxt">全局store中globalgood的name:{{ $store.state.golbalgood.name }}</span><span class="btn" @click="changeGlobalGoodName">通过dispatch触发actions change</span></div></div></div></template><script>
import { useStore } from "vuex";export default{setup(props, context){const store = useStore()const popularNames = store.getters.moreTwoPopularreturn {store,popularNames,}},data(){return {}},methods:{changeGlobalGoodColor(){this.$store.commit("changeGlobalGoodColor", "white~")},changeGlobalGoodName(){this.$store.dispatch("changeGlobalGoodName", "paper")}}
}</script><style lang="less" scoped>.showtxt{padding: 5px;font-size: 20px;
}.btn{background-color: cadetblue;padding: 2px 5px 2px 9px;margin: 20px;
}.back{background-color: antiquewhite;.show{padding: 5px;font-size: 20px;}
}</style>

getter读取数据        

        通过getter获取state中对象属性的值

import { createStore } from "vuex";export default createStore({// 数据,相当于datastate:{populars:[{num:100, name:"one hundrerd"},{num:200, name:"two hundrerd"},{num:300, name:"three hundrerd"},{num:400, name:"four hundrerd"},]},// 类似于组件的计算属性getters:{moreTwoPopular(state){return state.populars.filter(item=>item.num>200)}},})
<template><div class="box"><div class="back"><div v-for="(item, index) in popularNames" :key="index"><!-- <span class="showtxt"> -->全局store中globalgood过滤条件后的name:{{ item.name }}<!-- </span> --></div></div></div>
</template><script>
import { useStore } from "vuex";export default{setup(props, context){const store = useStore()const popularNames = store.getters.moreTwoPopularreturn {store,popularNames,}}
}</script><style lang="less" scoped>.showtxt{padding: 5px;font-size: 20px;
}.btn{background-color: cadetblue;padding: 2px 5px 2px 9px;margin: 20px;
}.back{background-color: antiquewhite;.show{padding: 5px;font-size: 20px;}
}</style>

 vuex使用modules引入拆分得store

         下面是一个拆分出的store,car.js

export default {state:{name:"byd",color:"white",speed:"300"},mutations:{changeCarName(state, name){state.car.name = name},changeCarColor(state, color){state.car.color = color},changeCarSpeed(state,speed){state.car.speed = speed}},actions:{changeCarName(context, name){setTimeout(() => {context.commit('changeCarName', name)}, 300);},changeCarColor(context, color){setTimeout(() => {context.commit('changeCarColor', color)}, 3000);},changeCarSpeed(context,speed){setTimeout(() => {context.commit('changeCarSpeed', speed)}, 3000);}}
}

        将car.js引入到全局store中的modules中

import { createStore } from "vuex";
import car from "./modules/car.js";export default createStore({// state过长时用于分割成多个state,每个里边可以包含state、mutations、actions,getter这些属性modules:{car,}
})

        在自定义组件ComA中使用car.js中存储的car数据对象

<template><div class="box"><span>使用Vuex中的modules中的模块Car,</span><span>获取Car的name: {{ name }},</span><span>获取Car的color: {{ color }},</span><span>获取Car的speed: {{ speed }}</span><div class="btn" @click="clickbtn"> tap </div></div>
</template><script>
import { useStore } from "vuex";
export default{setup(){const store = useStore()return{store}},data(){return {name:"1",color:"2",speed:"3",}},methods:{clickbtn(){console.log("ComA clickbtn", this.store.state.car.name)this.name = this.store.state.car.namethis.color = this.store.state.car.colorthis.speed = this.store.state.car.speed}}
}
</script><style lang="less" scoped>
.box{display: flex;flex-direction: row;background-color: antiquewhite;align-items: center;margin-top: 20px;.btn{margin-left: 15px;padding: 2px 20px 2px 20px;background-color: aquamarine;}
}
</style>

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com