vuex

作者: 江疏影子 | 来源:发表于2019-05-01 22:30 被阅读0次
vuex官方示意图

整个流程:首先确保是否有异步请求或者异步操作在整个vuex的流程中,如果有就在actions里面进行操作,在操作之前需要发一条消息(this.$store.dispatch(' '))给actions用于接收。接收之后发起请求或者异步操作,然后再commit一条消息给mutations,用于修改state里面的数据(store.commit(' ',data))。

以下是一个完整的栗子。比如在项目中有一个推荐的列表,可以来回的切换,但不需要每次在切换的时候都要去请求一次数据,这样会浪费请求的事件还要多次更新html,所以就利用vuex来完成。
首先在项目下新建一个store文件夹,分别引入vuevuex,以及在vue中注册vuex

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

接着写入以下内容

const store=new Vuex.Store({
  state:{
    
  },
  actions:{  //在这里处理异步请求(也可以处理同步请求),但是改变状态还是需要在mutations里面进行修改,所以需要commit
    
  },
  mutations:{//在这里处理同步请求,改变state里面的数据,不能异步(比如加定时器)

  }
})
export default store;

然后在main.js中引入并且注册到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/>'
})

而我们的项目需要正如上面所说,不需要来回的请求数据,所以我们在页面中就需要这么一段if判断。

if(this.$store.state.recommendList.length===0&&this.$store.state.bannerImg){
  //我们需要判断store里面state的recommendList和bannerImg是否有值,如果没有的话我们就需要dispatch一条消息给actions,告诉actions需要请求。
   this.$store.dispatch('getRecommendList')
}

然后来到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:{  //在这里处理异步请求(也可以处理同步请求),但是改变状态还是需要在mutations里面进行修改,所以需要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里面的函数来修改掉状态。
        store.commit('setRecommendList',res.data.data.modules.slice(1,length))
        store.commit('setRecommendBannerImg',res.data.data.modules[0].moduleContent.banners)
      })
    }
  },
  mutations:{//在这里处理同步请求,改变state里面的数据,不能异步(比如加定时器)
    setRecommendList:function(state,payLoad){
      state.recommendList=payLoad;
    },
    setRecommendBannerImg:function(state,payLoad){
      state.bannerImg=payLoad;
    }
  }
})
export default store;

相关文章

  • VUEX基本介绍,包含实战示例及代码(基于Vue2.X)

    VUEX 1 VUEX基本介绍 1.1 官方API 1.2 什么是vuex 1.3 Vuex使用场景 1、Vuex...

  • 【文档笔记】-Vuex

    什么是vuex? vuex文档: https://vuex.vuejs.org/zh/[https://vuex....

  • vuex配置

    vuex配置 目录 vuex的五个核心 配置vuex vuex持久化 一、vuex五个核心概念 State 定义状...

  • Vuex

    安装Vuex cnpm install vuex --save-dev Vuex是什么? 这是[Vuex的官网](...

  • Vuex

    1.Vuex概述 2.Vuex基本使用 3.使用Vuex完成todo案例 1.Vuex概述 Vuex是实现组件全局...

  • vuex

    Vuex介绍: Vuex官网:http://vuex.vuejs.org/ Vuex是实现数据状态管理的技...

  • vuex+axios 的开发流程记录

    相关文档 vuex: https://vuex.vuejs.org/zh/ 是否有必要使用vuex vuex是vu...

  • 2019-06-07

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

  • 配置 vuex 和 vuex 本地持久化

    配置 vuex 和 vuex 本地持久化 目录 vuex是什么 vuex 的五个核心概念State 定义状态(变量...

  • vuex

    配置 vuex 和 vuex 本地持久化 目录 vuex是什么 vuex 的五个核心概念State 定义状态(变量...

网友评论

      本文标题:vuex

      本文链接:https://www.haomeiwen.com/subject/nrhwnqtx.html