首頁  >  文章  >  web前端  >  Vuex提升學習篇分享

Vuex提升學習篇分享

小云云
小云云原創
2018-01-13 13:13:441392瀏覽

本文主要介紹了Vuex提升學習篇,小編覺得蠻不錯的,現在分享給大家,也給大家做個參考。一起跟著小編過來看看吧,希望能幫助大家?

上一篇我們講瞭如何透過一些簡單的動作來改變store.js 中的資料對象,在實際工作中,這是完全無法滿足工作需求的,所以這篇我們來說說如何做一些簡單的流程判斷。

自製vuex LOGO

#一、比如說我現在有這麼個需求,當count < 5 的時候,就停止count-- 。這就需要用到actions

actions 定義要執行的動作,如流程的判斷、非同步請求

##在store.js 內的actions 中


#

// 定义 actions ,要执行的动作,如流程的判断、异步请求
const actions ={
  increment({commit,state}){
    commit(&#39;increment&#39;) 
  },
  decrement({ commit, state }) {
    // **通过动作改变的数据,在此处来做判断是否提交**
    if (state.count > 5) {
      commit(&#39;decrement&#39;)
    }
  }
}

運行項目

#二、透過actions 模擬非同步請求

1. 先在App .vue 中定義好事件


<template>
 <p id="app">
  <button @click="increment">增加</button>
  <button @click="decrement">减少</button>
  //异步请求事件
  <button @click="incrementAsync">异步增加</button>
  <h1>{{count}}</h1>
 </p>
</template>

<script>
import {mapGetters,mapActions} from &#39;vuex&#39;
export default {
 name: &#39;app&#39;,
 computed:mapGetters([
  &#39;count&#39;
 ]),
 methods:mapActions([
  &#39;increment&#39;,
  &#39;decrement&#39;,
  &#39;incrementAsync&#39;
 ])
}
</script>

2. 在store.js 內的actions 中新增非同步Promise 事件


// 定义 actions ,要执行的动作,如流程的判断、异步请求
const actions ={
  increment({commit,state}){
    commit(&#39;increment&#39;) 
  },
  decrement({ commit, state }) {
    // **通过动作改变的数据,在此处来做判断是否提交**
    if (state.count > 5) {
      commit(&#39;decrement&#39;)
    }
  },
  incrementAsync({commit,state}){
    // 模拟异步操作
    var a = new Promise((resolve,reject) => {
      setTimeout(() => {
        resolve();
      }, 3000);
    })
    // 3 秒之后提交一次 increment ,也就是执行一次 increment 
    a.then(() => {
      commit(&#39;increment&#39;)
    }).catch(() => {
      console.log(&#39;异步操作失败&#39;);
    })
  }
}

運行項目


三、取得資料狀態

假如我們需要知道資料的奇偶數,那麼就需要在getters 判斷。

getters 中可以取得經過處理後的數據,從而來判斷狀態


#在store.js 的getters 中加入判斷奇偶數的方法


var getters={
  count(state){
    return state.count
  },
  EvenOrOdd(state){
    return state.count%2==0 ? &#39;偶数&#39; : &#39;奇数&#39;
  }
}

在App.vue 中加入


<template>
 <p id="app">
  <button @click="increment">增加</button>
  <button @click="decrement">减少</button>
  <button @click="incrementAsync">异步增加</button>
  <h1>{{count}}</h1>
  <!-- 判断奇偶数的方法 这种写法它会自动调用 EvenOrOdd 方法中的返回值,拿到的是个属性 -->
  <h1>{{EvenOrOdd}}</h1>
 </p>
</template>

<script>
import {mapGetters,mapActions} from &#39;vuex&#39;
export default {
 name: &#39;app&#39;,
 computed:mapGetters([
  // 判断奇偶数的方法
  &#39;EvenOrOdd&#39;,
  &#39;count&#39;
 ]),
 methods:mapActions([
  &#39;increment&#39;,
  &#39;decrement&#39;,
  &#39;incrementAsync&#39;
 ])
}
</script>

判斷奇偶數.gif


#如有不明白之處,也請留言交流,或直接翻閱API

相關推薦:


基於Vue、Vuex、Vue-router實現動畫切換功能

關於Vuex的全家桶狀態管理

#vuex概念理解與實例教學


以上是Vuex提升學習篇分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn