详解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 2.0的模块化前端 UI 组件库小结

    我给您讲解一下关于“基于Vue 2.0的模块化前端 UI 组件库小结”的完整攻略。 什么是Vue 2.0的模块化前端 UI 组件库 Vue 2.0的模块化前端 UI 组件库是一种基于Vue.js 2.0的前端框架,用于构建和管理UI组件库。这种框架将UI组件库分解成多个小型、可重用、独立的部件,每个部件都有自己的样式和功能。通过使用这些组件,您可以创建一系列…

    Vue 2023年5月27日
    00
  • 解决vue A对象赋值给B对象,修改B属性会影响到A的问题

    当将 A 对象赋值给 B 对象后,实际上只是将 B 对象指向了 A 对象在内存中的地址,而并不是新创建了一个对象。因此修改 B 对象的属性会影响到 A 对象的属性。为了解决这个问题,我们可以使用深拷贝或浅拷贝的方式来创建一个新的对象,从而避免修改一个对象的属性影响到另一个对象的属性。 以下是两条示例: 示例 1 let A = { name: ‘Tom’, …

    Vue 2023年5月28日
    00
  • Vue浅析讲解动态组件与缓存组件及异步组件的使用

    Vue浅析讲解动态组件与缓存组件及异步组件的使用 在Vue的开发中,组件化是非常重要的一个概念。而动态组件、缓存组件、异步组件也是Vue中非常常用而且重要的一部分。本文将带你对这三个组件做一个浅析讲解,并给出两个示例来说明。 动态组件 动态组件在Vue中允许我们在多个组件之间进行动态切换。简单来说,当我们需要在一组组件中动态地切换展示哪个组件的时候,使用动态…

    Vue 2023年5月28日
    00
  • 用vue写一个日历

    下面是用Vue写一个日历的完整攻略: 步骤一:创建Vue项目 首先需要用Vue CLI创建一个Vue项目。打开终端,执行以下命令: vue create vue-calendar 这个命令会创建一个名为vue-calendar的Vue项目,并且自动安装好了所需的依赖。 步骤二:安装日历组件库 为了快速开发日历组件,我们可以使用已有的日历组件库。这里我们选择v…

    Vue 2023年5月29日
    00
  • Vue+Java 通过websocket实现服务器与客户端双向通信操作

    一、介绍 WebSocket是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。在传统的HTTP请求中,双方之间的数据传输是单向的,即客户端向服务端发送请求,服务端对请求进行处理后把处理结果(响应)返回给客户端。WebSocket 协议在建立连接后,双方都可以独立的向对方发送数据,而不是像HTTP请求那样只能由客户端向服务端发送数据。这…

    Vue 2023年5月28日
    00
  • 17个vue常用的数组方法总结与实例演示

    我们来详细讲解一下“17个vue常用的数组方法总结与实例演示”的完整攻略。 一、前言 在Vue中,我们经常需要操作数组。而对于数组的操作,Vue提供了许多方便快捷的方法。本文将对Vue中17个常用的数组方法进行总结和实例演示,方便大家学习和使用。 二、数组方法 1. push 向数组添加一个或多个元素,并返回新的长度。 let arr = [1,2,3]; …

    Vue 2023年5月27日
    00
  • 浅析Vue 和微信小程序的区别、比较

    浅析Vue和微信小程序的区别、比较 Vue和微信小程序都是前端技术,目的都是为了提供更好的用户体验。但是Vue和微信小程序的开发、使用方式和运行环境等方面有所不同,下面将对它们进行简单的比较和分析。 开发方式 Vue和微信小程序的开发方式有很大的不同。 Vue使用Vue CLI和其他构建工具来创建和管理项目,使用Vue组件化开发,采用MVVM模式,提供更加灵…

    Vue 2023年5月27日
    00
  • 关于Dart中的异步编程

    我来为您详细讲解“关于Dart中的异步编程”。 异步编程简介 在编写程序时,我们通常会遇到一些需要等待的操作,例如网络请求、文件读取等,这些操作需要耗费时间。如果在这些操作执行完之前,程序阻塞在这里不继续执行,就会导致程序的性能下降,用户的体验变差。这时,我们通常会采用异步编程的方式来解决这个问题。 异步编程基于事件循环机制,通过回调函数的方式,在等待操作完…

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