Vue (Vuex)中 store 基本用法

Vue 提供了 Vuex 这个基于 Flux 架构的状态管理工具。使用 Vuex,我们可以在应用程序的任何组件中非常方便的存储和更新应用的状态数据。这里我们来讲解一下 Vuex 中 store 的基本用法,包括 state、getters、mutations 和 actions 四个部分。

创建 store

我们需要先创建一个 Vuex.store,这个 store 包含四种属性和各自的使用方式,分别是 state、getters、mutations 和 actions。

// 引入 Vuex
import Vuex from 'vuex'
// 使用 Vuex
Vue.use(Vuex)

// 创建 Vuex.store
const store = new Vuex.Store({
  state: {},
  getters: {},
  mutations: {},
  actions: {}
})

State

我们在 State 中存储全局共享的状态数据,可以通过 this.$store.state 访问,状态数据是响应式的,这意味着一旦状态数据被更新,组件中使用这个状态数据的地方也会相应的得到更新。

const store = new Vuex.Store({
  state: {
    count: 0
  }
})

Getters

Vuex 中的 Getters 类似于组件中的计算属性,通过 Getters 可以派生出一些状态数据。例如在 state 中存储了一个数组,我们可以通过 Getters 来获取数组中的某一个元素。

const store = new Vuex.Store({
  state: {
    products: [
      { name: 'apple', price: 5 },
      { name: 'banana', price: 2 },
      { name: 'watermelon', price: 10 }
    ]
  },
  getters: {
    getProductByName: (state) => (name) => {
      return state.products.find(product => product.name === name)
    }
  }
})

// 在组件中使用 Getters
computed: {
  appleProduct() {
    return this.$store.getters.getProductByName('apple')
  }
}

Mutations

Vuex 中的 Mutations 负责更新 State 中的状态数据,是 store 中唯一能够改变 state 的方法。Mutations 中的方法必须是同步函数,否则我们将无法跟踪状态变化的顺序,而在 Devtools 中也无法很容易的调试。

const store = new Vuex.Store({
  state: {
    count: 0
  },
  mutations: {
    increment(state) {
      state.count++
    },
    decrement(state) {
      state.count--
    }
  }
})

// 在组件中使用 Mutations
methods: {
  increment() {
    this.$store.commit('increment')
  },
  decrement() {
    this.$store.commit('decrement')
  }
}

Actions

Vuex 中的 Actions 类似于异步的 Mutations,Actions 中的方法可以包含任何异步操作,最终调用 Mutation 来改变 State。

const store = new Vuex.Store({
  state: {
    count: 0
  },
  mutations: {
    increment(state) {
      state.count++
    }
  },
  actions: {
    incrementAsync({ commit }) {
      setTimeout(() => {
        commit('increment')
      }, 1000)
    }
  }
})

// 在组件中使用 Actions
methods: {
  incrementAsync() {
    this.$store.dispatch('incrementAsync')
  }
}

以上是 Vuex 中 store 的基本用法,我们可以通过 store 来存储和管理全局的应用状态数据。通过 State 来存储状态数据,Getters 来计算派生状态数据,Mutations 来同步改变状态数据,Actions 来异步改变状态数据。

示例一:通过 Actions 异步改变状态数据

// 引入 Vuex
import Vuex from 'vuex'
// 使用 Vuex
Vue.use(Vuex)

// 创建 Vuex.store
const store = new Vuex.Store({
  state: {
    count: 0
  },
  mutations: {
    increment(state) {
      state.count++
    }
  },
  actions: {
    incrementAsync({ commit }) {
      setTimeout(() => {
        commit('increment')
      }, 1000)
    }
  }
})

// 在组件中使用 Actions
methods: {
  incrementAsync() {
    this.$store.dispatch('incrementAsync')
  }
}

示例二:通过 Getters 计算状态数据

// 引入 Vuex
import Vuex from 'vuex'
// 使用 Vuex
Vue.use(Vuex)

// 创建 Vuex.store
const store = new Vuex.Store({
  state: {
    products: [
      { name: 'apple', price: 5 },
      { name: 'banana', price: 2 },
      { name: 'watermelon', price: 10 }
    ]
  },
  getters: {
    getProductByName: (state) => (name) => {
      return state.products.find(product => product.name === name)
    }
  }
})

// 在组件中使用 Getters
computed: {
  appleProduct() {
    return this.$store.getters.getProductByName('apple')
  }
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue (Vuex)中 store 基本用法 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • 封装 axios+promise通用请求函数操作

    封装 axios+promise 通用请求函数可以提高代码的复用性和可维护性,下面详细讲解一个完整的攻略。 1. 安装 axios 使用 npm 安装 axios: npm i axios 2. 创建请求函数 import axios from ‘axios’ /** * 封装 axios+promise 通用请求函数 * @param {string} u…

    Vue 2023年5月28日
    00
  • vue加载自定义的js文件方法

    Vue是一种流行的JavaScript框架,它可以轻松管理Web应用程序的各个组件。在Vue应用程序中,您有时需要加载自定义的js文件以便可重复使用的方法或其他功能。本文将详细讲解Vue加载自定义的js文件的方法。 方法一:使用全局注册 在Vue应用程序中,您可以使用Vue的全局注册方法将自定义的js文件注册为全局方法。要实现这个目标,您需要按以下步骤操作:…

    Vue 2023年5月28日
    00
  • iview实现动态表单和自定义验证时间段重叠

    iView是一款基于Vue.js的UI框架,可以快速搭建美观、易用的网页应用程序。在iView中实现动态表单和自定义验证时间段重叠的功能,需要深入了解iView的表单组件和验证组件。 实现动态表单 在iView中,通过<Form :model=”formData”>和<FormItem>标签可以构建表单。动态表单的实现需要以下步骤: …

    Vue 2023年5月29日
    00
  • 在vue中使用express-mock搭建mock服务的方法

    下面我将为您详细讲解在vue中使用express-mock搭建mock服务的方法。 1. 什么是express-mock express-mock是基于Express框架的模拟数据生成器,可以用来模拟API返回数据,支持对于RESTful API的请求方式,非常方便快捷。 2. 安装express-mock 在使用express-mock之前需要安装Node…

    Vue 2023年5月28日
    00
  • Vue响应式原理Observer、Dep、Watcher理解

    Vue是一个响应式框架,其核心就是实现数据的双向绑定,而Vue双向绑定的实现就是基于其响应式原理的。Vue响应式原理由Observer、Dep、Watcher三个核心模块组成。本文将详细讲解Vue响应式原理的三个核心模块,以及通过两个示例来说明Vue响应式原理的使用。 一、Observer Vue的Observer模块负责监听数据的变化,从而通知相应的监听器…

    Vue 2023年5月27日
    00
  • vue函数防抖与节流的正确使用方法

    首先,防抖和节流都是为了解决高频率触发某个事件时造成的性能问题。 什么是函数防抖 函数防抖是指在一段时间内多次触发同一个函数时,只执行最后一次触发的函数,并在指定的等待时间后再触发该函数。 函数防抖的代码示例如下: function debounce(func, delay) { let timeout = null; return function () …

    Vue 2023年5月28日
    00
  • Vue组件生命周期三个阶段全面总结讲解

    Vue组件生命周期三个阶段全面总结讲解 Vue组件生命周期分为三个阶段,分别为创建(Creation)、更新(Update)和销毁(Deletion)。对于一个Vue组件而言,当组件被创建后,Vue会自动执行一系列的生命周期函数,这些函数将会对组件进行一些操作,让组件可以正确地渲染出来,并完成组件的销毁。在接下来的内容中,我们将详细讲解这三个阶段以及每个阶段…

    Vue 2023年5月27日
    00
  • 详解Vue3的响应式原理解析

    详解Vue3的响应式原理解析 什么是响应式原理 Vue3的核心原理之一是响应式原理。简单来说,响应式原理是让运用了Vue3的项目能够在数据发生改变时实时进行视图更新的机制。 响应式原理的实现 Vue3的响应式原理通过Proxy实现。Proxy是ES6引入的一种代理机制,类似于Object.defineProperty(),但是比defineProperty更…

    Vue 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部