vue3下的 vuex 安装到使用

vuex简介

独立于组件库的状态管理器,项目的公用数据可以保存在这个库(State)中,且支持响应式,但只能由Muntation修改,并不意味着将所有状态都放入store中,组件私有的,其他组件使用不到的,非公共状态,就可以不用放入store中

安装

npm 安装


npm install vuex@next --save

yarn 安装


yarn add vuex@next --save

以上 命令行 执行安装几秒后

包管理文件出现 vuex 与 其版本号 表示安装已完成

创建store文件以及main文件引入

创建 store->index.js文件 并写入如下代码

mian.js导入 store 并全局注册

State : vuex 中 储存公共数据的方法


// 上文创建的 store下的index.js文件中

import {createStore} from 'vuex'

const store = createStore({
    //共享的数据
    state(){
        return{
            count:0
        }
    },

   
})

export default store

整个项目 所有.vue组件 获取到这个公共数据 的两种方法

方法一(<script setup>组合式API): store.state.自定义字段名

在.vue文件中 使用 vuex store state 里的数据


//任意.vue 文件

<template>
  <div>
    <h1>{{ vuexCount }}</h1>
  </div>
</template>
<script setup>
import { ref ,onMounted} from 'vue'

//从 vuex 引用 useStore 
import {useStore} from 'vuex'

//实体化 useStore() 方法
const store = useStore()

const vuexCount = ref(0)
console.log('store.state.count',store.state.count)
onMounted(()=>{

// 获取 vuex store state 里的 count字段的数据 
  vuexCount.value = store.state.count + 10

})
</script>

方法二:mapState 辅助函数(当组件需要获取多个状态,并将这些状态加入计算属性的时候)


<template>
  <div>
    <!-- <h1>{{ store.state.count }}</h1> -->
    <h1>{{ count + count1 + count2 }}</h1>
  </div>
</template>
<script>
// 从 vuex 引入 mapState
import { mapState } from 'vuex'
export default {
  
  computed: {
    //在计算属性中 用...拓展多个引入 state中的状态
    ...mapState(['count', 'count1', 'count2'])
  }
}
</script>

Gatter:对state里的数据进行处理,但不改变state里面的数据

在store->index.js里面注册 getters 处理state数据的方法


    //State 共享的数据
    state() {
        return {
            count: 0,
            count1: 1,
            count2: 2,
            countArr: [{
                    a: 'a',
                    num: 10,
                    done: false
                },
                {
                    b: 'b',
                    num: 20,
                    done: true
                },
                {
                    c: 'c',
                    num: 30,
                    done: false
                },
            ]
        }
    },
    // Getter 对 State中的数据进行处理 但不改变其中的数据
    getters: {
        countArrsum(state) {
            return state.countArr[0].num += state.countArr[1].num
        },
        countArrsum1(state) {
            return state.count1 += state.count2
        },
        countArrsum2(state) {
            return state.countArr.filter(todo => todo.done)
        },
        //第二个参数可以传入 已有的getters的状态
        countArrsum3(state, getters) {
            return getters.countArrsum2.length
        },
        //可以调用时候传入参数(数组下标查询数组特别有用)
        getTodoById: (state) => (index) => {
            return state.countArr[index]
        },
    },

使用两种方式在任意组建中调用 getters的处理过的数据

方法一:store.getters.getters方法名(传参)

方法二:在computed中 使用...mapGetters多个引用

Mutation:改变state里面数据的唯一方法,只支持同步函数

在store->index.js里面的注册修改state里面数据的方法:mutations


import {
    createStore
} from 'vuex'

const store = createStore({
    //State 共享的数据
    state() {
        return {
            count: 0,
            count1: 1,
            count2: 2,
        }
    },
    // Muntation 修改 state里面数据的唯一方法 只支持同步调用
    mutations:{
        // 变更状态
        add1 (state) {
            state.count1++
          },
        //.vue组件调用传入 Number参数
        add2(state,num){
            state.count2 += num
        },
        //.vue组件调用传入 Object参数
        add3(state,obj){
            state.count2 += obj.num
        }
    }  
})

export default store

.vue调用store mutations 里方法的两种方式

方式一:store.commit

方式二:mapMutations 引入多个 mutations里面的方法

Action:通过提交mutation实现异步操作修改state里的状态

.vue组件里面调用 actions里的两种方法

方法一:store.dispatch('方法名',传值)

方法二:mapActions({组件方法名:‘actions里方法名’});mapActions([‘actions里方法名’])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值