≡
  • 网络编程
  • 数据库
  • CMS技巧
  • 软件编程
  • PHP笔记
  • JavaScript
  • MySQL
位置:首页 > 网络编程 > vue.js

Vuex 快速入门(简单易懂)

人气:465 时间:2019-04-12

这篇文章主要为大家详细介绍了Vuex 快速入门(简单易懂),具有一定的参考价值,可以用来参考一下。

感兴趣的小伙伴,下面一起跟随四海网的小编两巴掌来看看吧!

 

一、vuex介绍

 

 

 (1)vuex是什么?

 

1. 借鉴 了Flux、Redux、 The Elm Architecture

2. 专为 Vue.js 设计 的状态管理模式

3. 集中式存储和管理应用程序中所有组件的状态

4. Vuex 也集成到 Vue 的官方调试工具

5. 一个 Vuex 应用的核心是 store(仓库,一个容器),store包含着你的应用中大部分的状态 (state)。

 

(2)什么情况下我应该使用 Vuex?

 

1. 不适用:小型简单应用,用 Vuex 是繁琐冗余的,更适合使用简单的 store 模式。

2. 适用于:中大型单页应用,你可能会考虑如何把组件的共享状态抽取出来,以一个全局单例模式管理,不管在哪个组件,都能获取状态/触发行为,解决问题如下:

① 多个视图使用于同一状态:

传参的方法对于多层嵌套的组件将会非常繁琐,并且对于兄弟组件间的状态传递无能为力

② 不同视图需要变更同一状态:

采用父子组件直接引用或者通过事件来变更和同步状态的多份拷贝,通常会导致无法维护的代码

 

(3)Vuex 和单纯的全局对象有何不同?

 

1.Vuex 的状态存储是响应式的

当 Vue 组件从 store 中读取状态的时候,若 store 中的状态发生变化,那么相应的组件也会相应地得到高效更新。

2.你不能直接改变 store 中的状态

改变 store 中的状态的唯一途径就是显式地提交 (commit) mutation,方便我们跟踪每一个状态的变化。

 

二、vuex安装

 

* vue cli 3 中搭建脚手架预设时选择了“vuex”后便安装了vuex,可跳过此步阅读

 

(1)<script>引入

 

在 Vue 之后引入 vuex 会进行自动安装:

代码如下:



<script src="/path/to/vue.js"></script>
<script src="/path/to/vuex.js"></script>

 

(2) 包管理

 

代码如下:



npm install vuex --save //yarn add vuex

在一个模块化的打包系统中,您必须显式地通过 Vue.use() 来安装 Vuex: 

代码如下:



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

Vue.use(Vuex)

 

(3)git clone 自己构建

 

代码如下:



git clone https://github.com/vuejs/vuex.git node_modules/vuex
cd node_modules/vuex
npm install
npm run build

 

(4)兼容

 

Vuex 依赖 Promise。如果你支持的浏览器并没有实现 Promise (如 IE),那么你可以使用一个 polyfill 的库(如  es6-promis)

1.你可以通过 CDN 将其引入,window.Promise 会自动可用:

代码如下:



<script src="https://cdn.jsdelivr.net/npm/es6-promise@4/dist/es6-promise.auto.js"></script>

2.包管理器安装:

代码如下:



npm install es6-promise --save //yarn add es6-promise 

然后,将下列代码添加到你使用 Vuex 之前的一个地方:

代码如下:



import 'es6-promise/auto'

 

三、使用

 

 

(1)使用介绍

 

1.搭建store实例

①. 在创建vuex实例的地方引入vue、vuex,使用vuex:

代码如下:



import Vue from 'vue'//引入vue
import Vuex from 'vuex'//引入vuex

Vue.use(Vuex); //使用 vuex

②. 如果你的actions中用到 store.dispath() ,要引入store

代码如下:



import store from './store' //引入状态管理 store

③. new 一个 Vuex.Store 实例,并注册 state、mutations、actions、getters到 Vuex.Store 实例中

【图片暂缺】

ps. 你可以像上面那样将“属性和值”直接写在实例中,当代码量大时,你也可以分别写个.js文件,如下图:

【图片暂缺】

然后引入到 store/index.js 注册到vuex实例中,如:

【图片暂缺】

2.创建好 vuex.store 后,你需要在入口文件 main.js 中引入 store 并注册到 vue 实例中,这样就可以在任何组件使用store了:

【图片暂缺】

3.在组件中使用:

①. 引入vuex中各属性对应的辅助函数:

代码如下:



import {mapActions, mapState,mapGetters} from 'vuex' //注册 action 、 state 、getter

②. 使用store中的状态数据、方法:

【图片暂缺】

使用方法有很多,这种事最简单实用的,更多可以查看官网学习:https://vuex.vuejs.org/zh/

 

(2)具体demo

 

来个简单易懂的计数

eg:store.js

代码如下:



import Vue from 'vue';
import Vuex from 'vuex'; //引入 vuex
import store from './store' //注册store

Vue.use(Vuex); //使用 vuex

export default new Vuex.Store({
  state: {
    // 初始化状态
    count: 0,
    someLists:[]
  },
  mutations: {
    // 处理状态
    increment(state, payload) {
      state.count += payload.step || 1;
    }
  },
  actions: {
    // 提交改变后的状态
    increment(context, param) {
      context.state.count += param.step;
      context.commit('increment', context.state.count)//提交改变后的state.count值
    },
    incrementStep({state, commit, rootState}) {
      if (rootState.count < 100) {
        store.dispatch('increment', {//调用increment()方法
          step: 10
        })
      }
    }
  },
  getters: {
    //处理列表项
    someLists: state =>param=> {
      return state.someLists.filter(() => param.done)
    }
  }
})

使用时,eg:

main.js:

代码如下:



import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store' //引入状态管理 store

Vue.config.productionTip = false

new Vue({
 router,
 store,//注册store(这可以把 store 的实例注入所有的子组件)
 render: h => h(App)
}).$mount('#app')

views/home.vue:

代码如下:



<template>
 <div class="home">
  <!--在前端HTML页面中使用 count-->
  <HelloWorld :msg="count"/>
  <!--表单处理 双向绑定 count-->
  <input :value="count" @input="incrementStep">
 </div>
</template>

<script>
  import HelloWorld from '@/components/HelloWorld.vue'
  import {mapActions, mapState,mapGetters} from 'vuex' //注册 action 和 state

  export default {
    name: 'home',
    computed: {
      //在这里映射 store.state.count,使用方法和 computed 里的其他属性一样
      ...mapState([
        'count'
      ]),
      count () {
        return store.state.count
      }
    },
    created() {
      this.incrementStep();
    },
    methods: {
      //在这里引入 action 里的方法,使用方法和 methods 里的其他方法一样
      ...mapActions([
        'incrementStep'
      ]),
      // 使用对象展开运算符将 getter 混入 computed 对象中
      ...mapGetters([
        'someLists'
        // ...
      ])
    },
    components: {
      HelloWorld
    }
  }
</script>

运行结果:

【图片暂缺】

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持四海网。

本文来自:http://www.q1010.com/184/6163-0.html

注:关于Vuex 快速入门(简单易懂)的内容就先介绍到这里,更多相关文章的可以留意四海网的其他信息。

关键词:vue.js

您可能感兴趣的文章

  • vue项目打包部署_nginx代理访问方法分析
  • vue新vue-cli3环境配置和模拟json数据的实例
  • 用vue-cli开发vue时的代理设置方法
  • vue-cli 3.x 修改dist路径的方法
  • Vue前后端不同端口的实现方法
  • vue.js中proxyTable 转发请求的实现方法
  • vue构建动态表单的方法示例
  • axios全局注册,设置token,以及全局设置url请求网段的方法
  • vue 巧用过渡效果(小结)
  • vue 音乐App QQ音乐搜索列表最新接口跨域设置方法
上一篇:解决Vue-cli npm run build生产环境打包,本地不能打开的问题
下一篇:vue.js中proxyTable 转发请求的实现方法
热门文章
  • Vue 报错TypeError: this.$set is not a function 的解决方法
  • vue实现动态添加数据滚动条自动滚动到底部的示例代码
  • vue项目设置scrollTop不起作用(总结)
  • vue项目中使用vue-i18n报错的解决方法
  • iview实现select tree树形下拉框的示例代码
  • 分析关于element级联选择器数据回显问题
  • vue项目打包后打开页面空白解决办法
  • 解决element ui select下拉框不回显数据问题的解决
  • element-ui table span-method(行合并)的实现代码
  • element-ui 设置菜单栏展开的方法
  • 最新文章
    • 理解vue ssr原理并自己搭建简单的ssr框架
    • vue favicon设置以及动态修改favicon的方法
    • vue-router启用history模式下的开发及非根目录部署方法
    • 从零开始在NPM上发布一个Vue组件的方法步骤
    • Element input树型下拉框的实现代码
    • Vue 报错TypeError: this.$set is not a function 的解决方法
    • Vue.js组件高级特性实例分析
    • 浅谈VueJS SSR 后端绘制内存泄漏的相关解决经验
    • 分析Vue.js自定义tipOnce指令用法实例
    • 浅谈vuex actions和mutation的异曲同工

四海网收集整理一些常用的php代码,JS代码,数据库mysql等技术文章。