vue3.x中状态管理工具vuex的基本使用
dearweb 发布:2021-08-14 21:51:42阅读:vuex是专门为vue应用程序开发的状态管理模式(vuex官网),主要可是实现不用组件之间的状态共享以及组件里面数据的持久化,主要有state(定义状态)、getters(计算属性)、mutations(触发方法修改state里面的数据)、actions(执行异步方法)、modules(模块)五个核心概念。
vuex的基本使用
安装依赖(npm与yarn)
npm安装 npm install vuex@next --save yarn安装 yarn add vuex@next --save
在src目录下新建一个vuex的文件夹,vuex文件夹里面新建一个store.js文件,store.js文件的内容
//引入createStore import { createStore } from 'vuex' // 定义store仓库 const store = createStore({ state(){ return { count:1 } }, mutations:{ // 方法,修改state里面的数据 increment(state){ state.count++ } // 传值,第一个属性是state状态,第二个属性是传过来的值 setCount(state,num){ state.count = num } } }) //暴露stroe export default store;
在main.ts中挂载Vuex
import { createApp } from 'vue' import App from './App.vue' // 全局引入store import store from './vuex/store' const app = createApp(App) // 全局挂载store app.use(store) app.mount("#app")
获取state的方法
在组件中引入store,然后在计算属性里面获取(不推荐使用的方法)
<template> <div> <!-- 组件中使用 --> {{count}} </div> </template> <script> // 引入store import store from './vuex/store' export default { name: 'App', data(){ return{ } }, computed:{ count(){ return store.state.count } }, created() { }, methods: { }, } </script>
由于全局配置了Vuex,所以我们直接可以通过下面的方法获取state
<template> <div> <!-- 组件中使用 --> {{count}} </div> </template> <script> export default { name: 'App', data(){ return{ } }, computed:{ count(){ return this.$store.state.count } }, created() { }, methods: { }, } </script>
修改state状态和方法传值
<template> <div> <!-- 组件中使用 --> {{count}} <button @click="add">加一</button> <button @click="setCount(10)">修改count为10</button> </div> </template> <script> // 引入store import {mapState} from 'vuex' export default { name: 'App', data(){ return{ } }, created() { }, methods: { add(){ this.$store.commit('increment') // 名称与store.js中的mutations里面的方法名统一起来 }, // 传值 setCount(num){ this.$store.commit('setCount',num) } }, } </script>
第三种获取state的方法,利用mapState
<template> <div> {{count}} </div> </template> <script> import {mapState} from 'vuex' export default { name: 'App', data(){ return{ bar:'225', } }, computed:{ ...mapState(['count']) // 映射state中的 属性 }, provide(){ return{ title:'我是provide方法' } }, created() { }, methods: { }, } </script> <style> </style>
小礼物走一波,支持作者
赏还没有人赞赏,支持一波吧