Vue (Vuex)中 store 基本用法

yizhihongxing

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日

相关文章

  • 一篇文章看懂Vue组合式API

    一篇文章看懂Vue组合式API 什么是Vue组合式API Vue组合式API是Vue 3中新增的语法特性,它提供了一种新的组件编写方式,能够更加优化组件的可复用性、可维护性和可测试性。与Vue 2.x的Options API相比,Vue 3.x的组合式API更加灵活且容易理解使用。本文将介绍Vue组合式API的使用方法。 setup函数 在使用Vue组合式A…

    Vue 2023年5月28日
    00
  • Vue使用lodash进行防抖节流的实现

    下面是我对“Vue使用lodash进行防抖节流的实现”的完整攻略。 什么是防抖和节流 在讲解实现方法之前,我们来介绍一下什么是防抖和节流。 防抖指的是在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新开始计时。防抖常用于用户输入的场景中,如搜索框输入查询关键字。 节流指的是在一个时间段内只执行一次回调函数,即达到规定的执行间隔时间后才执行。常用于页…

    Vue 2023年5月29日
    00
  • Vue中使用 Echarts5.0 遇到的一些问题(vue-cli 下开发)

    当在Vue项目中使用Echarts5.0时,可能会遇到以下问题: 1. 需要手动引入echarts.min.js 如需在vue组件中使用echarts5.0,应先手动引入echarts.min.js。可以通过NPM或从cdn获取: npm install echarts –save 然后在Vue组件中引入echarts.min.js: import ech…

    Vue 2023年5月29日
    00
  • vue发送websocket请求和http post请求的实例代码

    我来帮你讲解一下。 发送websocket请求 在Vue中,我们可以使用vue-websocket库来实现对Websocket的使用。首先,在项目中安装vue-websocket库: npm install vue-websocket –save 接下来,在Vue实例中,我们需要使用mixins来引入websocket相关配置,并且在钩子函数中绑定事件和发…

    Vue 2023年5月28日
    00
  • Vue axios获取token临时令牌封装案例

    下面是详细讲解“Vue axios获取token临时令牌封装案例”的完整攻略。 1. 什么是Vue axios获取token临时令牌封装案例 在Vue项目中,我们通常会涉及到与后台服务进行数据交互的情况。在这个过程中,很多接口需要进行权限控制,需要在请求头中添加一些参数,比如token。而获取token的过程通常是需要进行一定的封装的,以方便项目的维护和管理…

    Vue 2023年5月28日
    00
  • vue中如何通过函数传参数

    在Vue中,我们可以通过自定义事件及$emit方法来实现组件间的传值。相比传统的props和$emit,在某些场景下,使用函数传参可以更加方便快捷。下面是两种函数传参的示例: 示例1:通过匿名函数传递参数 在Vue中,在父组件里定义一个函数,该函数传入参数后将其传递给子组件触发自定义事件。子组件接收到事件后,触发一个匿名函数并将父组件传入的参数带入,然后将匿…

    Vue 2023年5月27日
    00
  • Vue-CLI 3 scp2自动部署项目至服务器的方法

    下面是“Vue-CLI 3 scp2自动部署项目至服务器的方法”的完整攻略。 1. 安装scp2与ssh2 首先需要安装scp2和ssh2,可以通过npm安装。 npm install scp2 ssh2 –save-dev 2. 准备打包脚本 在package.json中新增打包脚本命令: "build:prod": "vu…

    Vue 2023年5月28日
    00
  • vue实现组件值的累加

    下面分享一下关于Vue实现组件值的累加的攻略。 1. 问题描述 在Vue应用中,经常需要使用组件来实现可重用的代码,其中组件拥有自己的状态和行为。而在某些情况下,需要将不同组件的状态进行累加,如何实现呢? 2. 解决方案 在Vue中,可以使用prop和事件来实现组件之间的通信,通过父子组件之间的交互,来实现组件值的累加。下面,通过简单示例来帮助解决这个问题。…

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