vuex标准化看这篇文章就够了~

简介: vuex标准化看这篇文章就够了~

1425695-20200924170702572-457074603.png


1、新建一个store文件夹,新建index.js文件,内容如下:


import Vue from 'vue'
import Vuex from 'vuex'
import state from './state'
import mutations from './mutations'
import * as getters from './getters'
import * as actions from './actions'
Vue.use(Vuex)
export default new Vuex.Store({ 
    state,
    mutations,
    actions,
    getters
});


2.新建state.js文件,内容如下:


const  state={
    sysname:{
        name:"张三",
        age:"210",
    },
    /异步请求的数据
    datatest:{
    }
}
export  default state


3.新建mutation-type.js,内容如下:


export const SYSNAME = 'SYSNAME';
export const DATATEST = 'DATATEST';


4.新建mutation.js,内容如下:


import * as type from './mutation-types'
const mutations = {
    [type.SYSNAME](state, value) {
        state.sysname= value;
    },
    //异步
    [type.DATATEST](state, value) {
        state.datatest= value;
    },
};
export default mutations;


5.新建getters.js,内容如下:


vuex 中的getters 想当于vue中的compute


getters是vuex 中的计算属性 ,计算属性写起来是方法,但它是个属性


export const sysname = state => state.sysname;
export const datatest = state => state.datatest;


6.新建actions.js,内容如下:


import * as type from './mutation-types'
import { actionTest } from '../https/api'
// import state from './state'  
// 可以通过  state.userInfo.orgId,获取state中的值
export const getTest = function({ commit }) {
  actionTest({
        // key :value,
        // key :value 你携带的参数
  }).then((res) => {
    if(res.success) {
            console.log(res.data );
                        //要去触发mutation,只能够通过commit;
      commit(type.DATATEST, res.data)
    }
  })
}


7.在入口文件main.js中使用:


import store from './store';
window.vm = new Vue({
    el:'#app',
    store,
    router,
    i18n,
    render: c => c(App)
})


8、在页面使用


<div> {{sysname}}</div>
<div  @click="change" class="awit-check">
   改变值
</div>
<div  @click="action" class="awit-check">
  异步
</div>
<div   class="awit-check">
  异步的数据{{ datatest  }}
</div>
import { mapMutations, mapGetters }  from "vuex"
//通过mapGetters 辅助函数来取值
methods:{
  change(){
            console.log( this.sysname)
            let sysnameInt= this.sysname;//将不需要修改的数据先取出来,
            this.changesysname({
                name:'数据改为123',  //key是state中的,value是你要保存的值
                age:sysnameInt.age, //取出来后,然后塞进去;
            })
   },
   //发送异步请求,
   action(){
         //要去触发action,只能够通过dispacth去触发的哈~;
         this.$store.dispatch('getTest');//触发action中的方法
   }
      //mapMutations 写在methods的最后面,他是用来修改值的哈~;
      //调用changesysname 方法去修改值; 
      //SYSNAME必须跟mutation.js 中的 [type.SYSNAME]这里的(SYSNAME)的保持一致;
       ...mapMutations({
              changesysname:'SYSNAME',
        })
},
 computed:{
         //mapGetters来取值,通过this.sysname就可以取值了
          ...mapGetters(['sysname','datatest'])  
},
相关文章
【每日一题Day141】LC2379得到 K 个黑块的最少涂色次数 | 滑动窗口
【每日一题Day141】LC2379得到 K 个黑块的最少涂色次数 | 滑动窗口
106 0
|
C++
C++一分钟之-循环结构:for与while循环
【6月更文挑战第18天】在C++中,`for`循环适合已知迭代次数,如数组遍历;`while`循环适用于条件驱动的未知次数循环。`for`以其初始化、条件和递增三部分结构简洁处理重复任务,而`while`则在需要先检查条件时更为灵活。常见错误包括无限循环和逻辑错误,解决办法是确保条件更新和正确判断。了解两者应用场景及陷阱,能提升代码效率和可读性。
483 6
|
存储 Java Maven
IntelliJ IDEA - 生成 iml 文件
IntelliJ IDEA - 生成 iml 文件
2647 0
IntelliJ IDEA - 生成 iml 文件
|
NoSQL Linux MongoDB
centos7搭建MongoDB以及MongoDB复制集
centos7搭建MongoDB以及MongoDB复制集
266 0
【java常见的面试题】讲一讲SpringBoot启动流程
Java基础的面试题【SpringBoot&SpringCloud篇】
147 0
|
SQL 运维 监控
redis瞬时查询返回量过多导致出口流量打满,影响系统整体响应时间
redis瞬时查询返回量过多导致出口流量打满,影响系统整体响应时间
631 0
redis瞬时查询返回量过多导致出口流量打满,影响系统整体响应时间
|
数据采集 JSON JavaScript
go语言实现网易云音乐爬虫
使用go语言简单实现网易云音乐爬虫
3000 0
|
Shell Linux
linux 基础学习之三:bash shell初识 下
5、变量键盘读取、数组与宣告: read, array, declare read:用于读取键盘输入的变量,常用在shell script的编写当中,下面先看基本功能: [root@linux ~]# read [-pt] variable 参数:-p ...
1046 0
|
6天前
|
云安全 人工智能 安全
AI被攻击怎么办?
阿里云提供 AI 全栈安全能力,其中对网络攻击的主动识别、智能阻断与快速响应构成其核心防线,依托原生安全防护为客户筑牢免疫屏障。