vuex介绍以及使用

Vuex

1. 什么是 Vuex

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式 + 库。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

2. 安装

在项目中执行如下命令来安装 vuex

npm install vuex@next

3. 开始

每一个 Vuex 应用的核心就是 store(仓库)。“store”基本上就是一个容器,它包含着你的应用中大部分的状态 (state)。Vuex 和单纯的全局对象有以下两点不同:

  • Vuex 的状态存储是响应式的。当 Vue 组件从 store 中读取状态的时候,若 store 中的状态发生变化,那么相应的组件也会相应地得到高效更新。
  • 你不能直接改变 store 中的状态。改变 store 中的状态的唯一途径就是显式地提交 (commit) mutation。这样使得我们可以方便地跟踪每一个状态的变化,从而让我们能够实现一些工具帮助我们更好地了解我们的应用。

3.1 创建仓库

在 src 目录下创建 store 目录,然后在这个目录下新建 index.ts 仓库文件。

import {createStore} from 'vuex'

export const store = createStore({
    // 定义一个状态(数据)
    state() {
        return {
            count: 0
        }
    }
})

3.2 引入仓库

要想使用 Vuex 来进行状态(数据)管理,首先需要在入口文件(main.ts)中导入 vuex

import { createApp } from 'vue'
import App from './App.vue'

import { store } from './store'

createApp(App).use(store).mount('#app')

3.3 使用仓库

为了方便,我们就在 App.vue 根组件中使用。

<template>
    <h3>{{ count }}</h3>
</template>

<script setup lang="ts">
import {useStore} from "vuex";
import {computed} from "vue";

const store = useStore()

// 计算属性
const count = computed(() => store.state.count)
</script>

首先需要引入仓库对象,然后通过计算属性来获取仓库中的状态(数据)。

3.4 修改状态

此时,我们需要对状态(数据)进行修改,比如点击一次就加 1。那么如何实现?

3.4.1 定义事件

首先我们需要添加点击事件,然后在事件中来安成功能。

<template>
    <h3>{{ count }}</h3>
    <button @click="increment">+</button>
</template>

<script setup lang="ts">
import {useStore} from "vuex";
import {computed} from "vue";

const store = useStore()

// 计算属性
const count = computed(() => store.state.count)

// 定义事件
const increment = () => {
    store.state.count++
}
</script>
3.4.2 定义mutations

这种方式能够实现状态的修改,但是我们不推荐这么使用,需要希望通过 Mutation 对象来完成。因此需要在仓库对象中,添加 Mutation 相应的方法。

export const store = createStore({
    // 定义一个状态(数据)
    state() {
        return {
            count: 0
        }
    },
    mutations: {
        // 增加的方法
        increment (state: any) {
            state.count++
        }
    }
})

我们在创建 store/index.ts 中增加了一个 mutations 节点,然后在节点中增加了 increment() 方法,这个方法会接收一个参数,这个参数是状态对象。

3.4.3 使用mutations
// 定义事件
const increment = () => {
    store.commit('increment') // 放的是方法名称
}

3.5 actions使用

在创建配置文件中定义 actions 节点,并添加相应的方法。如:

export const store = createStore({
    // 定义一个状态(数据)
    state() {
        return {
            count: 0
        }
    },
    mutations: {
        // 增加的方法
        increment (state: any) {
            console.log('mutations 中 increment 方法被调用')
            state.count++
        },
        // 减少的方法
        decrement (state: any) {
            state.count--
        },
        // 增加指定数据的方法
        add ( state: any, payload: number) {
            state.count += payload
        },
        // 减少指定数量的方法
        sub (state: any, p: number) {
            state.count -= p
        },
    },
    actions: {
        increment(context) {
            console.log('actions 中 increment 方法被调用')
            context.commit('increment')
        },
        decrement(context) {
            context.commit('decrement')
        },
        add (context) {
            context.commit('add')
        },
        sub (context) {
            context.commit('sub')
        }
    }
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值