详解vuex的简单使用

详解vuex的简单使用

什么是vuex

Vuex是Vue.js的状态管理库,在大型单页应用中,管理共享的状态是比较困难的,因为多个组件共享状态,会导致代码结构不易维护。而Vuex就是为了解决此类问题而诞生的。

Vuex采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。Vuex所存储的状态可以用之内的方法触发改变,且变化都是通过明确的提交(commit)来追踪的。

安装vuex

npm install vuex --save

或者使用CDN引入

<script src="https://unpkg.com/vuex"></script>

使用vuex

  • 创建Store实例

Store是Vuex中最核心的结构,它包含了应用的状态(state),定义了应用状态的变更逻辑(mutations),定义了应用从外部获取数据的方法(actions)。Vuex应用中所有组件通过Store实例中的状态来获取信息,也可能触发状态变化。

import Vuex from 'vuex'
import Vue from 'vue'

// 加载Vuex
Vue.use(Vuex)

// 创建Store实例
const store = new Vuex.Store({
  state: {
    count: 0
  },
  mutations: {
    increment(state) {
      state.count++
    }
  }
})
  • 在组件中获取state

computed: {
  count() {
    return this.$store.state.count
  }
}
  • 在组件中触发提交mutations

methods: {
  increment() {
    this.$store.commit('increment')
  }
}

示例说明

示例一:计数器功能

  • 在src目录下新建store.js文件,内容如下:
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

const state = {
  count: 0
}

const mutations = {
  increment(state) {
    state.count++
  },
  decrement(state) {
    state.count--
  }
}

const getters = {
  count(state) {
    return state.count
  }
}

const actions = {
  incrementAsync(context) {
    setTimeout(() => {
      context.commit('increment')
    }, 1000)
  }
}

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

export default store
  • 在main.js中引入store.js文件
import store from './store'
  • 在组件中引入Vuex,并使用Vuex.store获取store中的state和mutations
import { mapState, mapMutations } from 'Vuex'
export default {
  computed: {
    ...mapState({
      count: state => state.count
    })
  },
  methods: {
    ...mapMutations([
      'increment',
      'decrement'
    ])
  }
}
  • 在模板中使用计数器
<template>
  <div>
    当前计数:{{ count }}
    <button @click="increment">+</button>
    <button @click="decrement">-</button>
  </div>
</template>

示例二:异步获取数据

  • 在src目录下新建store.js文件,内容如下:
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

const state = {
  users: []
}

const mutations = {
  setUsers(state, users) {
    state.users = users
  }
}

const getters = {
  users(state) {
    return state.users
  }
}

const actions = {
  async getUsers(context) {
    const res = await fetch('https://jsonplaceholder.typicode.com/users')
    const users = await res.json()
    context.commit('setUsers', users)
  }
}

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

export default store
  • 在main.js中引入store.js文件
import store from './store'
  • 在组件中引入Vuex,并使用Vuex.store获取store中的state和actions
import { mapState, mapActions } from 'Vuex'
export default {
  computed: {
    ...mapState({
      users: state => state.users
    })
  },
  methods: {
    ...mapActions([
      'getUsers'
    ])
  },
  created() {
    this.getUsers()
  }
}
  • 在模板中使用获取的数据
<template>
  <ul>
    <li v-for="user in users" :key="user.id">{{ user.name }}</li>
  </ul>
</template>

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解vuex的简单使用 - Python技术站

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

相关文章

  • vue如何动态绑定img的src属性(v-bind)

    在Vue中,可以使用v-bind指令动态绑定HTML元素的属性。对于img标签的src属性,我们也可以使用v-bind进行动态绑定。 具体实现步骤如下: 绑定数据到Vue实例的data中 首先,需要将图片的URL地址存储在Vue实例的data中,作为动态绑定的数据。例如: <template> <div> <img :src=&…

    Vue 2023年5月28日
    00
  • Vue.set 全局操作简单示例

    Vue.set()方法是Vue.js提供的全局操作,用于给Vue实例动态添加属性,并保证新添加的属性能够响应式地触发视图更新。以下是一个关于Vue.set()的攻略: 简介 Vue.set()的语法如下: Vue.set(object, key, value) 其中: object:Vue实例的一个数据对象 key:新添加的键 value:新添加的键对应的值…

    Vue 2023年5月27日
    00
  • Vue 实现穿梭框功能的详细代码

    实现穿梭框功能需要依赖于 Vue.js 框架和一些 UI 组件库,本文以 element-ui 为例,给出一份详细的代码实现攻略。下面是具体步骤: 步骤一:引入 Element UI 首先,在 index.html 中引入 Element UI: <link rel="stylesheet" href="https://u…

    Vue 2023年5月28日
    00
  • vue-router跳转方式的区别解析

    下面是“vue-router跳转方式的区别解析”的完整攻略。 背景 Vue Router是Vue.js官方的路由管理器,它与Vue.js的核心深度集成,可以非常方便地构建单页Web应用程序。 在Vue Router中,有多种方式可以实现页面之间的跳转,包括<router-link>组件、$router.push方法、$router.replace…

    Vue 2023年5月27日
    00
  • 关于vue v-for 循环问题(一行显示四个,每一行的最右边那个计算属性)

    关于“关于vue v-for 循环问题(一行显示四个,每一行的最右边那个计算属性)”这个问题,我们可以有多种解决方案,以下是其中一个完整的攻略。 问题描述 我们需要在vue的模板中使用v-for指令遍历数组并生成四列的商品展示列表。而且在每个列表的最右边,我们需要显示一个计算属性的值。如下图所示: 商品1 商品2 商品3 商品4 计算属性1 商品5 商品6 …

    Vue 2023年5月29日
    00
  • 配置vue全局方法的两种方式实例

    当我们在使用 Vue.js 开发时,我们经常需要在多个组件中使用同一个方法,这时候可以将这个方法作为全局方法。Vue.js 提供了两种方式来配置全局方法。 1.通过 Vue.prototype 实现全局方法 在 Vue.js 初始化时可以通过 Vue.prototype 给 Vue 实例添加自定义属性。通过 Object.defineProperty 实现这…

    Vue 2023年5月28日
    00
  • Vue中简单的虚拟DOM是什么样

    下面我将详细讲解Vue中简单的虚拟DOM及其特点和应用。 什么是Vue中的虚拟DOM 在Vue中,将真实的DOM和虚拟的DOM都当作了节点来操作。它们的区别在于,真实的DOM节点可以直接在浏览器中渲染,而虚拟DOM节点是在内存中以对象的形式存在,有助于减少频繁的页面操作。 Vue中的虚拟DOM是一个模拟真实DOM的内存树结构,每个节点对应一个真实DOM节点,…

    Vue 2023年5月27日
    00
  • Vue中的.vue文件的使用方式

    Vue是一个流行的前端框架,用于构建交互式用户界面。在Vue中,.vue文件是组件的核心。本文将为您讲解Vue中如何使用.vue文件。 新建Vue项目 首先,您需要在本地计算机上安装Vue CLI。您可以按照官方文档的说明进行安装。 安装完成后,您可以使用以下命令创建新的Vue项目: vue create my-project 此命令将创建一个名为my-pr…

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