详解vuex的简单使用

yizhihongxing

详解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日

相关文章

  • mpvue构建小程序的方法(步骤+地址)

    mpvue是一款基于Vue.js框架的小程序前端开发框架,它可以实现在小程序中使用Vue.js的语法和开发方式,极大地提高了小程序的开发效率和代码质量。下面我将详细讲解如何使用mpvue构建小程序。 步骤 安装mpvue脚手架工具 npm install -g vue-cli vue init mpvue/mpvue-quickstart my-projec…

    Vue 2023年5月27日
    00
  • 在vue中使用export default导出的class类方式

    在Vue中,我们可以使用export default导出class类方式来定义组件。这种方式可以使组件更加模块化,易于组织和维护。下面是使用export default导出class类方式的完整攻略: 定义组件类 首先,我们需要定义一个组件类,它应该继承Vue类,并实现Vue的组件选项。我们可以使用ES6的class语法来定义组件类,例如: export d…

    Vue 2023年5月27日
    00
  • vue 单元测试初探

    一、前言 单元测试是开发过程中不可或缺的一环,其中包括了我们期望程序能实现的各种需求、场景,以及应对各种异常情况的正确性验证。在前端开发中,我们通常使用 Jest、Mocha、Chai 等工具来进行单元测试,本文主要介绍 Vue 单元测试的初探。 二、Vue 测试环境配置 1.创建项目 首先需要创建一个空白项目,即:npm init -y 或 yarn in…

    Vue 2023年5月27日
    00
  • Vue监听一个数组id是否与另一个数组id相同的方法

    要监听一个数组中对象的属性,需要用到 Vue 中提供的 $watch 或 $watchCollection 方法。具体实现步骤如下: 在数据中定义两个数组,分别为 idArray 和 targetArray,如下代码所示: data() { return { idArray: [1, 2, 3], targetArray: [{id: 1, name: ‘T…

    Vue 2023年5月29日
    00
  • 详解Vue中双向绑定原理及简单实现

    详解Vue中双向绑定原理及简单实现 什么是双向绑定 双向绑定是一种数据绑定方式,它能够将数据和视图双向实时同步,当数据发生改变时,视图也会实时更新;当视图发生改变时,数据也会实时更新。Vue作为当下最流行的前端框架,采用的正是双向数据绑定的方式。 Vue中双向绑定原理 Vue中采用的双向绑定是数据劫持的方式。具体来说,Vue通过Object.definePr…

    Vue 2023年5月28日
    00
  • Vue项目中new Vue()和export default{}的区别说明

    在Vue项目中,new Vue()和export default{}是两个常见的语法,它们在用途和作用上有所不同,下面详细讲解它们的区别说明。 new Vue() new Vue()是Vue框架中创建Vue实例的方式,它接收一个对象作为参数,用于配置Vue实例的选项和行为。在一个Vue项目中,通常会在根组件中使用new Vue(),来创建Vue实例并挂载到D…

    Vue 2023年5月27日
    00
  • vue3.0 Reactive数据更新页面没有刷新的问题

    在Vue3.0中,数据响应式有了非常大的变化。Vue3.0采用Proxy对象代理数据对象,代替了Object.defineProperty()方法。在使用Vue3.0时,会遇到一个问题:当响应式数据发生改变后,页面并没有更新。 这个问题是由于Vue3.0采用了“依赖收集”的观察机制。当数据发生变化时,会通知相关的依赖进行更新,但是因为是异步的操作,所以可能会…

    Vue 2023年5月28日
    00
  • Qiankun原理详解JS沙箱是如何做隔离

    Qiankun是一个微前端框架,其中的JS沙箱是Qiankun实现隔离的核心原理之一。JS沙箱是通过在沙箱环境中运行JS代码以及将运行结果导出到外部环境来实现隔离的。 以下是Qiankun的JS沙箱运行的完整攻略: 创建沙箱环境 在Qiankun中,我们可以使用html和iframe来创建沙箱环境,具体代码如下: <iframe id="qk…

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