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日

相关文章

  • vue3中unplugin-auto-import自动引入示例代码

    在Vue3中,为了更加轻松地管理依赖和避免手动导入组件,可以使用unplugin-auto-import插件自动导入组件和其他依赖。下面是如何在Vue3中使用unplugin-auto-import的完整攻略和两个示例说明。 安装和配置unplugin-auto-import 首先,需要安装unplugin-auto-import: npm install …

    Vue 2023年5月28日
    00
  • 微信小程序 JS动态修改样式的实现代码

    下面是详细的攻略: 1. 前置知识 在讲解微信小程序 JS 动态修改样式的实现代码前,我先介绍一下需要了解的前置知识。 1.1 小程序样式 小程序的样式可以分为两种:全局样式和局部样式。 全局样式:通过 app.wxss 文件定义,作用于整个小程序; 局部样式:通过在组件中定义样式(例如:.wxml 文件中的 class 或 style 属性),只作用于当前…

    Vue 2023年5月27日
    00
  • ES6中异步对象Promise用法详解

    ES6中异步对象Promise用法详解 什么是Promise Promise是 ES6 引入,用于异步编程的一种解决方案。简单来说,Promise就是一个代表了异步操作的对象,该对象可以用来获取异步操作结果。Promise 对象在异步操作的初始阶段就返回给调用方一个代表结果的“承诺”,以后当异步操作完成时,Promise 会根据异步操作的结果,改变自己的状态…

    Vue 2023年5月28日
    00
  • vue3+ts+vite+electron搭建桌面应用的过程

    下面是关于使用Vue3、TypeScript、Vite和Electron搭建桌面应用的完整攻略。 搭建步骤 1. 创建项目工程 首先需要安装Vite脚手架,在终端中输入以下命令安装: npm install -g create-vite-app 安装完成后,通过以下命令创建项目工程: create-vite-app my-project 此时会询问你需要使用…

    Vue 2023年5月28日
    00
  • 详解Vue3中侦听器watch的使用教程

    详解Vue3中侦听器watch的使用教程 什么是watch 在使用Vue的开发中,watch是非常常用的一个功能。它作为Vue的一个重要特性,经过多年的发展,已经变成了非常强大的工具。它可以帮助我们监听数据的变化,进而执行相应的操作。对于开发中需要根据数据的变化做出相应的响应的情形,watch是非常有用的。 如何使用watch 基本用法 Vue中的watch…

    Vue 2023年5月28日
    00
  • vue项目如何去掉URL中#符号的方法

    Vue.js是一个采用渐进式开发的JavaScript框架,路由系统使用的是Vue Router,该路由系统默认使用URL中的 “#”(hash) 字符来控制页面的跳转。但是,在某些场景下,我们想要去掉URL中的 # 符号。这里提供两种去掉 URL 中 # 符号的方法。 方法一:使用HTML5 History模式 HTML5 History模式会使用HTML…

    Vue 2023年5月27日
    00
  • Vue打包后出现一些map文件的解决方法

    问题描述: 在 Vue 项目中打包后,可能会在控制台看到一些类似于以下的提示: Failed to load resource: the server responded with a status of 404 (Not Found) http://localhost:8080/js/chunk-6e951050.578deb7c.js.map 这是因为在…

    Vue 2023年5月27日
    00
  • vue3.0中使用websocket,封装到公共方法的实现

    接下来我将详细讲解如何在vue3.0中使用websocket,并将其封装成公共方法。同时,我会提供两条示例来说明具体的实现过程。 前置知识 在继续阅读本文之前,你需要掌握以下技能: 了解 Vue3.0 的基本语法; 知道如何使用 WebSocket; 理解 JavaScript 中的 Promise。 如果你尚未掌握上述知识,建议你先花费一定时间学习这些基础…

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