vuex 的基本用法

这篇具有很好参考价值的文章主要介绍了vuex 的基本用法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、vuex是什么?

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,

这个状态管理应用包含以下几个部分:

  • state,驱动应用的数据源;
  • view,以声明方式将 state 映射到视图;
  • actions,响应在 view 上的用户输入导致的状态变化。

给出一张官方的“单向数据流”理念的简单示意: 

vuex 的基本用法

 每一个 Vuex 应用的核心就是 store(仓库)。“store”基本上就是一个容器,它包含着你的应用中大部分的状态 (state)。

Vuex 和单纯的全局对象有以下两点不同:

  • Vuex 的状态存储是响应式的。当 Vue 组件从 store 中读取状态的时候,若 store 中的状态发生变化,那么相应的组件也会相应地得到高效更新。(也就是所谓的MVVM)
  • 你不能直接改变 store 中的状态。改变 store 中的状态的唯一途径就是显式地提交 (commit)

看官网的一张图,更加方便能看懂:

vuex 的基本用法

 如果理解了这张图,你就能知道vuex的工作原理了!

 需要注意的点:

  • 改变状态的唯一途径就是提交mutations
  • 如果是异步的,就派发(dispatch)actions,其本质还是提交mutations
  • 怎样去触发actions呢?可以用组件Vue Components使用dispatch或者后端接口去触发
  • 提交mutations后,可以动态的渲染组件Vue Components

觉得是不是少了什么,没错,就是getters 下面原理实现的时候会说 

二、实现原理

1.准备工作

先npm i store 下载vuex插件,然后在mian.js中引入,如下:

vuex 的基本用法

 mian.js代码:

import Vue from 'vue'
import App from './App.vue' 
import router from './router'
import store from './store' 
import axios from 'axios'
import { Button, Card } from 'element-ui'

Vue.use(Button)
  .use(Card)
// import ElementUI from 'element-ui'
// import 'element-ui/lib/theme-chalk/index.css'
Vue.prototype.$http = axios
// // 注册 会自动将所有组件注册为全局组件
// Vue.use(ElementUI)

Vue.config.productionTip = false

new Vue({
  router, 
  store, // 挂载到vue实例上,这样全部的组件都可以使用store
  render: h => h(App)
}).$mount('#app')

 store文件下的index.js代码:

import Vue from 'vue'
import Vuex from 'vuex'
import item from './modules/item'
import cart from './modules/cart'
import VuexPersistence from 'vuex-persist'
// 缓存部分数据
const vuexLocal = new VuexPersistence({
  storage: window.localStorage,
  reducer: state => {
    return {
      item: state.item
    }
  }
})
/*
  storage属性的值应该是一个对象
  三个方法
  setItem(key, v)
  getItem(key)
  removeItem
*/
Vue.use(Vuex)
// 初始化 vuex 仓库实例
const store = new Vuex.Store({
  strict: true,
  state: {
    num: 5000
  },
  modules: {
    item,
    cart
  },
  plugins: [vuexLocal.plugin]
})

export default store

 store文件下modules文件下的cart.js

import axios from 'axios'
export default {
  namespaced: true, //命名空间
  state: {
    num: 10,
    items: []
  },
  mutations: {
    ADD_NUM (state, n) {
      state.num += n
    },
    REDUCE_NUM (state, n) {
      state.num -= n
    },
    INIT_ITEMS (state, items) {
      state.items = items
    }
  },
  actions: {
    FETCH_ITEMS ({ commit }, params = {}) {
      axios.post('/conner/shop/goods/list/v2', params).then(res => {
        if (res.data.code === 0) {
          commit('INIT_ITEMS', res.data.data.result)
        }
      })
    }
  },
  getters: {
    doubleNum (state) {
      return state.num * 2
    }
  }
}

这里面运用到了state, mutations,actions,getters,modules 那这五个属性分别代表什么意思呢?
 

  • state: vuex的基本数据,用来存储变量。 
  • getter:从基本数据(state)派生的数据,相当于store的计算属性;getter 的返回值会根据它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算。
  • mutation:提交更新数据的方法,必须是同步的(如果需要异步使用action)。每个 mutation 都有一个字符串的 事件类型 (type) 和 一个 回调函数 (handler) 。 回调函数就是我们实际进行状态更改的地方,并且它会接受 state 作为第一个参数,提交载荷作为第二个参数。
  • action:和mutation的功能大致相同,不同之处在于:
  1.  Action 提交的是 mutation,而不是直接变更状态;
  2.  Action 可以包含任意异步操作。
  • modules:模块化vuex,可以让每一个模块拥有自己的state、mutation、action、getters,使得结构非常清晰,管理更为方便。

使用下面这两种方法存储数据:
dispatch:异步操作,写法: this.$store.dispatch(‘mutations方法名’,值)

commit:同步操作,写法:this.$store.commit(‘mutations方法名’,值)


总结

使用vuex一共大致可以分为五步文章来源地址https://www.toymoban.com/news/detail-501700.html

  1. 下载          npm i store -S
  2. 引入         import Vuex from 'vuex'
  3. 注册         Vue.use(Vuex)
  4. 实例化      const store = new Vuex.Store({  //写配置   })
  5. 挂载到vue实例    new Vue({
      store, // 挂载到vue实例上,这样全部的组件都可以使用store
      render: h => h(App)
    }).$mount('#app')
     

到了这里,关于vuex 的基本用法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vue中axios的基本用法

    目录 1.什么是axios? 2.axios的特征 3.axios在使用的时候需要注意的细节  4.axios在vue中的实例运用(留言评论接口)  App.vue代码 mian.js代码   axios 是一个基于promise 用于浏览器和 nodejs 的 HTTP 客户端。简单的理解就是ajax的封装     从浏览器中创建 XMLHttpRequest     从 node.js 发出 htt

    2024年02月08日
    浏览(31)
  • Vuex的用法

    Vuex是一个专门为Vue.js应用程序开发的状态管理模式,它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。使用Vuex可以让我们更方便地管理组件之间的状态,以及更新状态的方式。Vuex的使用步骤如下: 1. 安装Vuex:使用npm或

    2024年02月11日
    浏览(24)
  • vuex中mapActions的概念及用法

    先看一下官方文档对mapActions的描述: 简单来说 mapActions 就是 将组件中的函数映射为对应的action 。 一般情况下我们会在组件中使用 this.$store.dispatch() 来触发 action ,想要调用多少个 action 就需要调用多少次 dispatch() ,而使用 mapActions 的话只需要 往 mapActions 中传入与 action 同名

    2024年02月13日
    浏览(40)
  • Vue2-动态路由传参的基本用法

    在Vue 2中,可以使用动态路由传递参数。动态路由参数允许你在路由路径中包含占位符,这些占位符可以在路由被匹配时提取出来并作为参数传递给组件。 下面是一个使用Vue 2动态路由传参的基本用法的例子: 首先,在路由配置文件(通常是 router/index.js )中定义一个带有动

    2024年02月01日
    浏览(44)
  • 正则表达式、grep过滤工具、sed基本用法、sed基本操作指令、sed应用案例

    1.1 问题 本案例要求熟悉正则表达式的编写,完成以下任务: 利用grep或egrep工具练习正则表达式的基本用法 1.2 方案 表-1 基本正则列表 表-2 扩展正则列表 1.3 步骤 实现此案例需要按照如下步骤进行。 步骤一:正则表达式匹配练习 1)基本正则表达式 测试 ^ $ [] [^] 测试 .

    2024年01月24日
    浏览(86)
  • Android : Room 数据库的基本用法 —简单应用_一_入门

    Android Room 是 Android 官方提供的一个持久性库,用于在 Android 应用程序中管理数据库。它提供了一个简单的 API 层,使得使用 SQLite 数据库变得更加容易和方便。 以下是 Android Room 的主要特点: 对象关系映射 (ORM):Room 允许您将 Java 或 Kotlin 对象映射到数据库表中。您可以定义数

    2024年04月09日
    浏览(87)
  • Vue.js 3.2 中 UseRouter 和 UseRoute 的用法详解

    Vue.js 是一款流行的前端框架,由于其易用性和灵活性,在开发中得到了广泛的应用。而在 Vue.js 3.2 中,新增了许多 Composition API,其中 UseRouter 和 UseRoute 可以用于路由管理,使得前端路由开发更加方便。 Vue.js 是一款流行的前端框架,由于其易用性和灵活性,在开发中得到了广

    2024年02月16日
    浏览(32)
  • 【Vuex状态管理】Vuex的基本使用;核心概念State、Getters、Mutations、Actions、Modules的基本使用

    在开发中,应用程序需要处理各种各样的数据,这些数据需要保存在应用程序中的某一个位置,对于这些数据的管理就称之为是 状态管理。 在前面是如何管理自己的状态呢? 在Vue开发中,使用组件化的开发方式; 而在组件中定义data或者在setup中返回使用的数据,这些数据称

    2024年02月07日
    浏览(47)
  • Vuex的基本使用

    Vuex 是vue中特别重要的一个技术,专门在vue中实现集中式状态(数据)管理的一个vue插件,对vue应用中多个组件的共享状态进行集中式的管理(读/写),也是一种组件间通信的方式,且适用于任意组件间通信 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式 + 库。它采用集中式存

    2024年02月11日
    浏览(21)
  • Vuex基本使用

    专门在 Vue 中实现集中式状态(数据)管理的一个Vue 插件,对vue应用中多个组件的共享状态进行集中式的管理(读/写),也是一种组件间通信的方式,且适用于任意组件间通信。 多个组件依赖于同一状态 来自不同组件的行为需要变更同一状态 vuex 管理的状态对象 它应该是唯

    2024年02月16日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包