vuex

vuex官方示意圖

整個(gè)流程:首先確保是否有異步請(qǐng)求或者異步操作在整個(gè)vuex的流程中,如果有就在actions里面進(jìn)行操作,在操作之前需要發(fā)一條消息(this.$store.dispatch(' '))給actions用于接收。接收之后發(fā)起請(qǐng)求或者異步操作,然后再commit一條消息給mutations,用于修改state里面的數(shù)據(jù)(store.commit(' ',data))。

以下是一個(gè)完整的栗子。比如在項(xiàng)目中有一個(gè)推薦的列表,可以來(lái)回的切換,但不需要每次在切換的時(shí)候都要去請(qǐng)求一次數(shù)據(jù),這樣會(huì)浪費(fèi)請(qǐng)求的事件還要多次更新html,所以就利用vuex來(lái)完成。
首先在項(xiàng)目下新建一個(gè)store文件夾,分別引入vuevuex,以及在vue中注冊(cè)vuex

import Vue from 'vue';
import Vuex from 'vuex';
import axios from 'axios';
Vue.use(Vuex);

接著寫(xiě)入以下內(nèi)容

const store=new Vuex.Store({
  state:{
    
  },
  actions:{  //在這里處理異步請(qǐng)求(也可以處理同步請(qǐng)求),但是改變狀態(tài)還是需要在mutations里面進(jìn)行修改,所以需要commit
    
  },
  mutations:{//在這里處理同步請(qǐng)求,改變state里面的數(shù)據(jù),不能異步(比如加定時(shí)器)

  }
})
export default store;

然后在main.js中引入并且注冊(cè)到vue中。

import Vue from 'vue'
import App from './App'
import router from './router'
import store from '../store/index';
new Vue({
  el: '#app',
  router,
  store,
  components: { App },
  template: '<App/>'
})

而我們的項(xiàng)目需要正如上面所說(shuō),不需要來(lái)回的請(qǐng)求數(shù)據(jù),所以我們?cè)陧?yè)面中就需要這么一段if判斷。

if(this.$store.state.recommendList.length===0&&this.$store.state.bannerImg){
  //我們需要判斷store里面state的recommendList和bannerImg是否有值,如果沒(méi)有的話我們就需要dispatch一條消息給actions,告訴actions需要請(qǐng)求。
   this.$store.dispatch('getRecommendList')
}

然后來(lái)到store下面的index.js

import Vue from 'vue';
import Vuex from 'vuex';
import axios from 'axios';
Vue.use(Vuex);

const store=new Vuex.Store({
  state:{
    recommendList:[],
    bannerImg:[]
  },
  actions:{  //在這里處理異步請(qǐng)求(也可以處理同步請(qǐng)求),但是改變狀態(tài)還是需要在mutations里面進(jìn)行修改,所以需要commit
    getRecommendList:function(store){
      axios.get('/v2/page',{
        params:{
          pageId:1,
          tabId:1,
          currentPage:1,
          pageSize:8,
          _:1556056259410
        }
      }).then(res=>{
        let length=res.data.data.modules.length;
        //在actions里面并不能修改state 所以需要commit一條消息給mutations,讓mutations里面的函數(shù)來(lái)修改掉狀態(tài)。
        store.commit('setRecommendList',res.data.data.modules.slice(1,length))
        store.commit('setRecommendBannerImg',res.data.data.modules[0].moduleContent.banners)
      })
    }
  },
  mutations:{//在這里處理同步請(qǐng)求,改變state里面的數(shù)據(jù),不能異步(比如加定時(shí)器)
    setRecommendList:function(state,payLoad){
      state.recommendList=payLoad;
    },
    setRecommendBannerImg:function(state,payLoad){
      state.bannerImg=payLoad;
    }
  }
})
export default store;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 安裝 npm npm install vuex --save 在一個(gè)模塊化的打包系統(tǒng)中,您必須顯式地通過(guò)Vue.u...
    蕭玄辭閱讀 3,049評(píng)論 0 7
  • ### store 1. Vue 組件中獲得 Vuex 狀態(tài) ```js //方式一 全局引入單例類 // 創(chuàng)建一...
    蕓豆_6a86閱讀 789評(píng)論 0 3
  • vuex 場(chǎng)景重現(xiàn):一個(gè)用戶在注冊(cè)頁(yè)面注冊(cè)了手機(jī)號(hào)碼,跳轉(zhuǎn)到登錄頁(yè)面也想拿到這個(gè)手機(jī)號(hào)碼,你可以通過(guò)vue的組件化...
    sunny519111閱讀 8,164評(píng)論 4 111
  • 目錄 - 1.什么是vuex? - 2.為什么要使用Vuex? - 3.vuex的核心概念?||如何在組件中去使用...
    我跟你蔣閱讀 4,241評(píng)論 4 51
  • Vuex 是一個(gè)專為 Vue.js 應(yīng)用程序開(kāi)發(fā)的狀態(tài)管理模式。它采用集中式存儲(chǔ)管理應(yīng)用的所有組件的狀態(tài),并以相應(yīng)...
    白水螺絲閱讀 4,800評(píng)論 7 61

友情鏈接更多精彩內(nèi)容