位置:首页 > web前端 > vue

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>


24人点赞 返回栏目 提问 分享一波

小礼物走一波,支持作者

还没有人赞赏,支持一波吧

留言(问题紧急可添加微信 xxl18963067593) 评论仅代表网友个人 留言列表

暂无留言,快来抢沙发吧!

本刊热文
网友在读
手机扫码查看 手机扫码查看