一篇搞定Vuex

1.简介

  首先,你必须明显明白vuex到底是干啥的,主要解决开发中的哪些问题?

  Vuex是一个专门为Vue.js应用程序开发的状态管理模式,它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式变化

  说白了,就是:提供了那么一个公共存储的地方,存放各个组件的数据,组件访问数据和操作数据访问这个地方即可

  所以,Vuex主要解决是组件间数据传递问题,尤其是嵌套组件,项目一大时,父子组件间的数据传递就非常麻烦了,而Vuex则提供了一种集中管理组件数据的方案,当然小型项目就没必要用Vuex了

2.Demo准备

  • vue init webpack-simple vuex-demo
  • cd vuex-demo
  • npm install
  • npm install vuex -S

3.访问store对象的两种方式  

  Vuex的核心是Store(仓库),相当于是一个容器,一个store实例中包含以下属性的方法:

  • state  定义属性(状态、数据)
  • getters  用来获取属性
  • actions  定义方法(动作)
  • commit  提交变化,修改数据的唯一方式就是显式的提交mutations
  • mutations  定义变化

  注:不能直接修改数据,必须显式提交变化,目的是为了追踪到状态的变化

  创建store.js文件,在main.js中导入并配置store.选项

import Vue from ‘vue‘
import Vuex from ‘vuex‘

Vue.use(Vuex);

//定义属性(数据)
var state = {
  count: 6
}

//创建store对象
const store = new Vuex.Store({
  state,
})

//导出store对象
export default store;
import Vue from ‘vue‘
import App from ‘./App.vue‘

import store from ‘./store.js‘  //导入store对象

new Vue({
  store,
  el: ‘#app‘,
  render: h => h(App)
})

 

  方式一:通过this.$store访问

  //方式1:通过this.$store访问
  computed: {
    count() {
      return this.$store.state.count;
    }
  }

  方式二:通过mapState、mapGetters、mapActions访问,vuex提供了两个方法

  • mapState  获取state
  • mapGetters  获取getters
  • mapActions  获取actions
import Vue from ‘vue‘
import Vuex from ‘vuex‘

Vue.use(Vuex);

//定义属性(数据)
var state = {
  count: 6
}

//定义getters
var getters = {
  count(state) {
    return state.count;
  }
}

//定义actions,要执行的操作,如流程判断、异步请求
const actions = {
  increment(context) { //包含 commit dispatch state
    context.commit(‘increment‘);
  },
  decrement(context) {
    if (context.state.count > 10) {
      context.commit(‘decrement‘);
    }
  }
}

//定义mutations,处理状态(数据)的改变
const mutations = {
  increment(state) {
    state.count++;
  },
  decrement(state) {
    state.count--;
  }
}

//创建store对象
const store = new Vuex.Store({
  state,
  getters,
  actions,
  mutations,
})

//导出store对象
export default store;
<template>
  <div id="app">
    <button @click="increment">增加</button>
    <button @click="decrement">减小</button>
    <p>当前数字为:{{count}}</p>
  </div>
</template>

<script>
import { mapState, mapGetters, mapActions } from "vuex";

export default {
  name: "app",
  data() {
    return {
      msg: "Welcome to Your Vue.js App"
    };
  },
  //方式1:通过this.$store访问
  /*computed: {
    count() {
      return this.$store.state.count;
    }
  }*/

  /*computed:mapState([
    ‘count‘
  ])*/

  computed: mapGetters(["count"]),
  methods:mapActions([
    ‘increment‘,
    ‘decrement‘,
  ])
};
</script>

<style>
</style>

  

原文地址:https://www.cnblogs.com/xinsiwei18/p/9365606.html

时间: 2024-11-10 05:16:12

一篇搞定Vuex的相关文章

一篇搞定RSA加密与SHA签名|与Java完全同步

看到这篇文章的同学可幸福了,当时在做RSA加密与签名的时候网上的资料简直不要太老,做完后实在是忍受不下去了,这篇文章我会详细讲解iOS如何实现RSA加密与签名,并且与Java完全同步,这是我的第二篇博客,若有什么不足之处还请大家指教. 基础知识 什么是RSA? 答:RSA是一种非对称加密算法,常用来对传输数据进行加密,配合上数字摘要算法,也可以进行文字签名. RSA加密中padding? 答:padding即填充方式,由于RSA加密算法中要加密的明文是要比模数小的,padding就是通过一些填充

一篇搞定SQL语句

首先,你要知道SQL语句是常见数据库的查询语言,在关系型数据库里,表间关系有三种,通俗说就是爱情,亲情,友情,其中爱情在道德上说的是一对一,亲情就想到父母,你只有一个父亲或一个母亲,而一个当爹的就有可能有多个孩子,这就是一对多,而友情,你有多个朋友,你的某个朋友也有包括你在内的多个朋友,这就是多对多 其次,两张怎么建立上述的表间关系呢,比如一对多或多对多,有一种神奇的东西叫做外键,就一张表的列值在另外一张表的列有所对应,一对多就是一个外键,多对多就两个外键 最后,什么关系,什么操作,直接见实例就

一篇搞定SQLAlchemy--关系对象映射

要使用SQLAlchemy,必须先下载这个模块 pip3 install sqlalchemy 或 pycharm File--> Settings-->project...-->Project Interpreter-->右上+-->搜索你要安装的模块 源码安装,源码下载地址:https://www.oschina.net/news/84998/sqlalchemy-1-1-10 开始操作前,你必须清楚SQLAlchemy实现操作数据库的原理,SQLAlchemy本身是无法

一篇搞定Python正则表达式

1. 正则表达式语法 1.1 字符与字符类 1 特殊字符:\.^$?+*{}[]()| 以上特殊字符要想使用字面值,必须使用\进行转义 2 字符类    1. 包含在[]中的一个或者多个字符被称为字符类,字符类在匹配时如果没有指定量词则只会匹配其中的一个. 2. 字符类内可以指定范围,比如[a-zA-Z0-9]表示a到z,A到Z,0到9之间的任何一个字符 3. 左方括号后跟随一个^,表示否定一个字符类,比如[^0-9]表示可以匹配一个任意非数字的字符. 4. 字符类内部,除了\之外,其他特殊字符

一篇搞定spring Jpa操作数据库

开始之前你必须在项目配置好数据库,本文使用的spring boot,相比spring,spring boot省去了很多各种对以来组件复杂的配置,直接在pom配置组件,完后会自动帮我们导入组件 <!-- 导入SpringDataJPA的坐标 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa<

一篇搞定vue请求和跨域

vue本身不支持发送AJAX请求,需要使用vue-resource.axios等插件实现 axios是一个基本Promise的HTTP请求客户端,用来发送请求,也是vue2.0官方推荐的,同时不再对vue-resource进行更新和维护 axios发送AJAX请求 安装axios npm install axios -S 基本用法 axios([options]) axios.get(url[,options])  传参方式:1.通过url 传参   2.通过params选项传参 axios.p

Java并发:一篇搞定线程池

原文地址:https://www.nowcoder.com/discuss/152050?type=0&order=0&pos=6&page=0 本文是在原文的基础+理解,想要系统学习,请看原文地址. 线程池介绍 1.1 线程池的概念 线程池(thread pool): 一种线程使用模式.线程的创建销毁是十分消耗资源的(线程创建消耗内存.线程上下文切换从消耗CPU资源).使用线程池可以更加充分的协调应用CPU.内存.网络.I/O等系统资源.在程序启动首先创建线程,在程序启动后可以将

一个系列搞定校招——简历篇

上一篇一个系列搞定校招——综合篇总体介绍了校招从简历到面试的各个环节,没看过的可以先看上一篇,接下来将分别从每一个环节详细介绍,本篇先说[简历篇]. 前面说过,简历是求职的敲门砖,一份好的简历必然会给你带来更多的机会,我们写简历尽量要做到一点: 一眼就可以看到这个人有什么技能或能力,过去取得了哪些成就,适合负责什么业务.注意是一眼,这样既能突出自身优势,也节约hr的时间,因为校招时期hr一天要筛选几百份简历,人家没时间去细看每一份简历,所以就要求我们写简历一定要突出重点,吸引眼球.下面将详细介绍

iOS开发——实用技术OC篇&amp;8行代码教你搞定导航控制器全屏滑动返回效果

8行代码教你搞定导航控制器全屏滑动返回效果 前言 此次文章,讲述的是导航控制器全屏滑动返回效果,而且代码量非常少,10行内搞定. 效果如图: 如果喜欢我的文章,可以关注我,也可以来小码哥,了解下我们的iOS培训课程.陆续还会有更新ing.... 一.自定义导航控制器 目的:以后需要使用全屏滑动返回功能,就使用自己定义的导航控制器. 二.分析导航控制器侧滑功能 效果:导航控制器默认自带了侧滑功能,当用户在界面的左边滑动的时候,就会有侧滑功能. 系统自带的侧滑效果: 分析: 1.导航控制器的view