VueX状态管理器

cnpm i vuex axios -S
1 创建Vuex 仓库
import Vue from 'vue'
import Vuex from 'vuex'
vue.use(Vuex)
const store = new VueX.store({
state: {//存放状态},
mutations:{//唯一修改状态的地方,不在这里做逻辑处理}
})
export default store 2 在入口文件main.js下引入store
import store from './store/index.js'
将store 放到根实例里 以供全局使用
new Vue({
el:'#app',
store,
components:{App},
template:<App/>
})
开始使用store(以home组件为例)

Vuex的使用也是一种渐进式的,你可以从最简单的开始使用,根据经验和技术的增加,再渐进增强对它的使用,如果按照级别算vuex的使用可以从最基本的t1级别开始,先总结最基本的前三个版本,后续有时间再总结其他的

T1级别

1.
在hoome/script.js中进行请求数据
import Vue from 'vue'
import axios from 'axios'
export default {
mounted(){
axios.get('请求数据的接口')
.then((res)=>{this.$store.commit('changeList',res.data)})
//changeList相当于调用了在store.mutations中定义的修改状态的方法
//res.data 就是在改变状态时要修改的数据,需要在这传递过去。
.catch((err)=>{console,log(err)})
}
}
2.
在store/index.js中定义
import Vue from 'vue'
import Vuex from 'vuex'
vue.use(Vuex)
const store = new VueX.store({
state: {
//存放状态
list: [ ] //存放一个空的数组
},
mutations:{
//唯一修改状态的地方,不在这里做逻辑处理
//定义一个修改list的方法
//state 指上面存放list的对象,data 为在请求数据出传过来请求到的数据
changeList (state,data) {
state.list = data //将请求来的数据赋值给list
}
}
})
export default store 3.
在home/index.vue中渲染
<template>
//渲染数据的时候通过this.store.state.list直接从store中取数据
//还可以从其他组件通过这种方法去用这个数据无需重新获取
<li v-for='item of this.store.state.list' :key='item.id'>{{item.name}}</li>
</template> 注意点:

如果我们在home组件中获取的数据,可以在其他组件中使用,但是是当页面刷新默认进入home页,也就是相当于修改了数据,再点击其他页面也能有数据。如果我们在user组件中获取的数据要在home组件中使用,当页面刷新数据是不会显示的,因为此时还没有触发user组件中的更改数据的方法,所以数据为空,当点击user页面时,就会有数据,这个时候再去点击home页面我们就能够看到在home 组件中使用user组件中获取的数据了。解决这种问题的办法可以将数据存到本地一份或者都在首页进行请求数据

T2级别

在页面进行渲染的时候我们需要通过this.store.state去拿数据,这样的写法太长而且不太好
用计算属性结合mapState去解决这个问题
1
在home/script.js中进行操作
import Vue from 'vue'
import mapState from 'vuex'
import axios from 'axios'
export default {
computed:{
//mapState为辅助函数
...mapState(['list'])
},
mounted(){
axios.get('请求数据的接口')
.then((res)=>{this.$store.commit('changeList',res.data)})
.catch((err)=>{console,log(err)})
}
} 2
在home/index.vue中渲染
<template>
<li v-for='item of list' :key='item.id'>{{item.name}}</li>
</template>

T3级别



  使用常量去代替事件类型(便于查看状态,利于维护)
1
在store下创建mutation-type.js
export const CHANGE_LIST = 'CHANGE_LIST' 2
在store/index.js引入mutation-type.js
import Vue from 'vue'
import Vuex from 'vuex'
import {CHANGE_LIST } from‘./mutation-type.js’
vue.use(Vuex)
const store = new VueX.store({
state: {
list: [ ] //存放一个空的数组
},
mutations:{
//我们可以使用Es6风格的计算属性命名功能来使用一个常量作为函数名
[CHANGE_LIST] (state,data) {
state.list = data //将请求来的数据赋值给list
}
}
})
export default store 3
在home/script.js中进行引入
import Vue from 'vue'
import mapState from 'vuex'
import axios from 'axios'
import {CHANGE_LIST} from ‘../../store/mutation-type.js’
export default {
computed:{
//mapState为辅助函数
...mapState(['list'])
},
mounted(){
axios.get('请求数据的接口')
.then((res)=>{this.$store.commit(CHANGE_LIST,res.data)})
.catch((err)=>{console,log(err)})
}
}

VueX状态管理器 的应用的更多相关文章

  1. vue项目--vuex状态管理器

    本文取之官网和其他文章结合自己的理解用简单化的语言表达.用于自己的笔记记录,也希望能帮到其他小伙伴理解,学习更多的前端知识. Vuex 是什么? Vuex 是一个专为 Vue.js 应用程序开发的状态 ...

  2. vuex状态管理,state,getters,mutations,actons的简单使用(一)

    之前的文章中讲过,组件之间的通讯我们可以用$children.$parent.$refs.props.data... 但问题来了,假如项目特别大,组件之间的通讯可能会变得十分复杂... 这个时候了我们 ...

  3. 组件之间的通讯:vuex状态管理,state,getters,mutations,actons的简单使用(一)

    之前的文章中讲过,组件之间的通讯我们可以用$children.$parent.$refs.props.data... 但问题来了,假如项目特别大,组件之间的通讯可能会变得十分复杂... 这个时候了我们 ...

  4. vue状态管理器(用户登录简单应用)

    技术点:通过vue状态管理器,对已经登录的用户显示不同的页面: 一  vue之状态管理器应用 主要用来存储cookie信息 与vue-cookies一起使用 安装:npm install vue-co ...

  5. vuex状态管理-数据改变不刷新

    困惑: 在页面初始化的时候,我提交到vuex状态管理,然后在获取的时候获取不到,我找到了出错的地点,并进行了修改,然后可以获取到状态 但是不知道原因? 定义了如下的state const state ...

  6. 前端MVC Vue2学习总结(八)——Vue Router路由、Vuex状态管理、Element-UI

    一.Vue Router路由 二.Vuex状态管理 三.Element-UI Element-UI是饿了么前端团队推出的一款基于Vue.js 2.0 的桌面端UI框架,手机端有对应框架是 Mint U ...

  7. vuex状态管理demo

    vuex状态管理主要包含四个概念  mapState,mapMutations,mapGetters,mapActions. 编写vuex文件夹下面的store.js import Vue from ...

  8. 前端Vue框架-vuex状态管理详解

    新人报道!多多关照-多提宝贵意见 谢谢- vuex理解 采用集中式存储管理模式.用来管理组件的状态,并以自定义规则去观测实时监听值得变化. 状态模式管理理解 属性 理解 state 驱动应用的数据源 ...

  9. 前端技术之:如何在vuex状态管理action异步调用结束后执行UI中的方法

    一.问题的起源 最近在做vue.js项目时,遇到了vuex状态管理action与vue.js方法互相通信.互操作的问题.场景如下图所示: 二.第一种解决方法 例如,我们在页面初始化的时候,需要从服务端 ...

随机推荐

  1. 三十六、www服务nginx介绍

    一.Nginx介绍 ,相对于LAMP经典组合而言,LNMP是近几年来流行的组合.(linux+nginx+mysql+php) Nginx是一个开源www服务软件,是俄罗斯人开发的,本身是一款静态ww ...

  2. A component required a bean named xxx that could not be found. Action: Consider defining

    0 环境 系统:win10 1 正文 https://stackoverflow.com/questions/44474367/field-in-com-xxx-required-a-bean-of- ...

  3. hdu 2586 How far away ?(LCA模板)(倍增法)

    在dfs的过程中维护三个数组: deep[i],表示i点在树中的深度: grand[x][i],表示x的第2^i个祖先的节点编号: dis[x][i],表示x到它2^i祖 #include<io ...

  4. 通过 WMI 返回硬盘序列号的一点小问题

    通过 SELECT * FROM Win32_PhysicalMedia 可以返回硬盘序列号,但是在实际使用中某些情况下(原因未知)返回的 SerialNumber 是实际硬盘序列号的字符串按字符Ur ...

  5. android完整智能家居、备忘录、蓝牙配对、3D动画库、购物车页面、版本更新自动安装等源码

    Android精选源码 app 版本更新.下载完毕自动自动安装 android指针式分数仪表盘 ANdroid蓝牙设备搜索.配对 Android 图片水印框架,支持隐形数字水印 android3D旋转 ...

  6. 成为一名PHP专家其实并不难

    本文作者Bruno Skvorc是一名资深的Web开发者.在这篇文章里主要是讲述成为一名专业的PHP专家所要经历的过程,以及在这个过程里要如何学习掌握技巧和对工具的舍取.(以下为编译内容) 当阅读各种 ...

  7. numpy.ravel() 与 numpy.flatten()

    两者都可实现将多维数组降位一维的功能 numpy.flatten()返回拷贝,对拷贝所做的修改不会影响原始矩阵 numpy.ravel()返回视图,会影响原始矩阵 1)ravel() In [16]: ...

  8. 一:MYsql登录,服务开启和停止

    字段的属性: 1:名称 2:数据类型 3:长度 4:约束 SQL的分类:(结构化查询语言) 1:数据查询语言DQL    select 2:数据操纵语言DML    insert  delete  u ...

  9. Python使用pycharm导入pymysql(MySQL)或pymssql(SQLServer)

    file->setting->project->project interperter,双击右侧出现的pip,弹出安装包,搜索pymysql->选择第一个->Instal ...

  10. Docker:发布镜像问题denied: requested access to the resource is denied的解决方法

    问题: 发布镜像的时候,按照教程执行的,结果没有成功,搜了下,找到解决方法了,记录一下. denied: requested access to the resource is denied 解决方法 ...