new Vue({
// state
data () {
return {
count: 0
}
},
// view
template: `
<div>{{ count }}</div>
`,
// actions
methods: {
increment () {
this.count++
}
}
})

上面是我们定义的一个vue的实例

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式

what is 状态管理模式?

状态管理模式
1:state:驱动应用的数据源,比如组件当中的data就是数据源
2:view:以声明的方式将state映射到视图,比如组件上面的那些标签
3:actions:响应在视图view上面用户操作导致的状态变化,比如组件当中methods中的事件

//自己的理解,他们三有啥共同点? count,他们三都用到了这个值,如果只是单个组件中用到这个值,那么还可以控制,如果是多个组件同时用到这个数据呢?
//store就是将这些共享的状态抽出来,用一个全局单例模式进行管理

重点:全局--表示所有的组件都可以访问
  :单例--表示Vuex只有一个实例

//这是一个store的实例,暂时还没有加入模块
export default new Vuex.Store({
  state,
  getters,
  mutations,
  actions,
})

构造器选项的解析:

state:类型为对象或者函数,如果是对象的话就会被当做根state,如果传入的是一个返回对象的函数,那么返回的对象作为根state
作用:存放数据
全局访问 this.$store.state--将store注入到了根节点的情况
//state对象属性可以定义成所有数据类型
const state = {
userInfo: { phone: 111 }, //用户信息
orderList: [{ orderno: '1111' }], //订单列表
orderDetail: null, //订单产品详情
login: false, //是否登录
numver:1,
myfunction:function() {
console.log(arguments);
},
}
当我们组件需要使用这个状态的时候,并且随着状态改变,组件的视图也会改变,那么最简单的方式就是在计算属性中返回某个状态
const Counter = {
template: `<div>{{ count }}</div>`,
computed: {
count () {
return this.$store.state.count
}
}
}
//待续...如果组件需要多个状态呢?十个状态就要写十个计算实属性吗?

打个比方,你返回了一个数组,但是我们需要的是排序后的数组,并且多个组件都需要这个排序后的数组,解决办法无非是每个组件都重新进行对数组排序,或者写一个公共的方法,然后每个组件都引用这个方法

Vuex 允许我们在 store 中定义“getter”(可以认为是 store 的计算属性)。就像计算属性一样,getter 的返回值会根据它的依赖被缓存起来(当通过属性访问的时候),且只有当它的依赖值发生了改变才会被重新计算,

注意:getter 在通过方法访问时,每次都会去进行调用,而不会缓存结果

getters:{ [key: string]: Function },没错这货是对象,并且他的所有属性都必须为函数
const getters = {
myFirstGetter:function(state,getters){
console.log(arguments);
},
mysecondGetter:function(state,getters){
console.log(arguments);
return function(param) {
console.log(arguments)
}
}
}
作用:定义计算属性 //是的,计算属性,只不过这些计算属性是依赖state里面的数据
原因:我们确实可以在组件中对state的数据进行操作,但是多个组件获取同一个状态,都要进行相同的操作呢,那还不如我们集中管理.
全局访问 this.$store.getters
重点:所有的处理函数总是接收state作为第一个参数 ,接收其他的getter作为第二个参数
getters里面的方法的调用方式:
1:以属性的形式访问store.getters.funName //不要带括号,不要带括号,不要带括号
2:以方法的形式访问store.getters.funName(param) //前提是这个定义的方法的返回值必须是个函数,且param是作为返回值函数的参数.
待续.... 但是函数的参数很奇怪啊
mutations:类型{ [type: string]: Function },一个又一个函数
官方文档解释 { [type: string](事件类型): Function(回调函数) }
作用:如果我们在各自的组件当中更改状态的话,那么必然导致其他的组件也会更新该状态,最后我们都不知道到底是谁在更新这个状态,所以采用mutations提交的形式进行状态更改的管理,像不像git提交代码的形式...
全局访问 this.$store._mutations
重点:所有的回调函数(也就是进行状态更改的地方)总是接收state(没错就是上面的那个state)作为第一个参数
mutations里面的方法调用方式:
store.commit('funName')--这种是我们没有把store注入到根组件
this.$store.commit('funName') --这种是注入了根组件,那么在每一个子组件都可以这种方式 然后我们还可以传参数
this.$store.commit('funName',{}) 参数作为对象这样可以包含多个字段
还有一种方式,使用包含type属性的对象, this.$store.commit({type:'funName',key:value}) 重点:原则就是要记住 mutation 必须是同步函数
actions:类型{ [type: string]: Function },也是一个又一个函数,
官方文档解释 { [type: string](事件类型): Function(回调函数) }在回调函数当中,我们进行状态改变
全局访问 this.$store._actions
actions里面的方法调用方式: store.dispatch('funName') 同理于mutations
重点:所有的处理函数总是接收"context"作为第一个参数,他是一个对象... 一个与 store 实例具有相同方法和属性的对象
{ //感觉好厉害的样式,但是暂时不知道有什么用
state, // 等同于 `store.state`,若在模块中则为局部状态
rootState, // 等同于 `store.state`,只存在于模块中
commit, // 等同于 `store.commit`
dispatch, // 等同于 `store.dispatch`
getters, // 等同于 `store.getters`
rootGetters // 等同于 `store.getters`,只存在于模块中
} 重点:Action 与mutations的区别
1:Action 提交的是 mutation,而不是直接变更状态
2:Action 可以包含任意异步操作
Module:Vuex 允许我们将 store 分割成模块(module)。每个模块拥有自己的 state、mutation、action、getter
甚至于嵌套子模块,模块又是由几个模块组成
const moduleA = {
state: { ... },
mutations: { ... },
actions: { ... },
getters: { ... }
} const moduleB = {
state: { ... },
mutations: { ... },
actions: { ... }
} const store = new Vuex.Store({
modules: {
a: moduleA,
b: moduleB
}
}) 1:对于模块内部的 mutation 和 getter,接收的第一个参数是模块的局部状态对象 --state
2:对于模块内部的actions,局部状态通过 context.state暴露出来,根节点状态则为 context.rootState
3:对于模块内部的 getter,根节点状态会作为第三个参数暴露出来

我与Vuex的第一次邂逅的更多相关文章

  1. Vue 爬坑之路(四)—— 与 Vuex 的第一次接触

    在 Vue.js 的项目中,如果项目结构简单, 父子组件之间的数据传递可以使用  props 或者 $emit 等方式 http://www.cnblogs.com/wisewrong/p/62660 ...

  2. 与python的第一次邂逅

    python简介 一.什么是python python是一种面向对象.直译式的计算机程序语言,所以有了武老师的那句名言:一切皆为对象 python的设计哲学是:“优雅”,“明确”,“简单” pytho ...

  3. Vuex的第一次接触

    前言:最近在做Vue实现去哪网,想要实现在城市列表页面,点击某个城市的时候,主页的头部的城市会随着改变,就是首页和城市页面有共用的数据要分享,这里使用Vuex 1. Vuex是什么? 是Vue官方推荐 ...

  4. (转)Vue 爬坑之路(四)—— 与 Vuex 的第一次接触

    在 Vue.js 的项目中,如果项目结构简单, 父子组件之间的数据传递可以使用  props 或者 $emit 等方式 http://www.cnblogs.com/wisewrong/p/62660 ...

  5. Vue ---- Vuex 的第一次接触

    在 Vue.js 的项目中,如果项目结构简单, 父子组件之间的数据传递可以使用  props 或者 $emit 等方式 http://www.cnblogs.com/wisewrong/p/62660 ...

  6. Vue 爬坑之路(六)—— 使用 Vuex + axios 发送请求

    Vue 原本有一个官方推荐的 ajax 插件 vue-resource,但是自从 Vue 更新到 2.0 之后,官方就不再更新 vue-resource 目前主流的 Vue 项目,都选择 axios ...

  7. vuex状态管理工具

    父子组件之间的通信  props传递  父 向子单向传递:且每次 父组件更新时  子组件的props会跟着更新: 如果需要 子组件把数据传递给父组件,就需要在子组件上绑定自定事件 在子组件使用this ...

  8. session和cookie

    第一次听到cookie这个词的时候着实兴奋了一段时间,以为是小饼干呢~快喝一杯82年的java压压惊!哈哈~ 与cookie的第一次邂逅——清缓存和清cookie 刚毕业的时候上班,做二次开发,明明后 ...

  9. Vue 爬坑之路(九)—— 用正确的姿势封装组件

    迄今为止做的最大的 Vue 项目终于提交测试,天天加班的日子终于告一段落... 在开发过程中,结合 Vue 组件化的特性,开发通用组件是很基础且重要的工作 通用组件必须具备高性能.低耦合的特性 为了满 ...

随机推荐

  1. SQL*Plus工具

    或者

  2. Confluence 6 SQL Server 测试你的数据库连接

    在你的数据库设置界面,有一个 测试连接(Test connection)按钮可以检查: Confluence 可以连接你的数据库服务器 数据库字符集和隔离级别是正确的 你的数据库用户有正确的数据库权限 ...

  3. OC Swift中检查代码行数

    1 打开终端  cd 进去当前项目 2 总行数查看命令     find . -name "*.m" -or -name "*.h" | xargs wc -l ...

  4. 【mongo】可以用localhost启动,无法用ip启动问题的解决

    问题: mongo安装在a.b.c.d机器上,启动mongo服务后, mongo localhost:27017可以进入数据库, mongo 127.0.0.1:27017也可以进入数据库 mongo ...

  5. 【linux】安装python依赖库confluent_kafka

    想跑https://github.com/ghaughian/mongo-kafka-spark/blob/master/src/pub.py这个程序,发现没有confluent_kafka库 1.p ...

  6. hashlib、logging模块

    hashlib模块 hashlib提供了常见的摘要算法,如md5和sha1等等. 那么什么是摘要算法呢?摘要算法又称为哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通 ...

  7. delete web server(nginx)

    #!/bin/bash conf_dir1="/usr/local/nginx/conf/vhost.d" #conf_dir2="/usr/local/apache2/ ...

  8. SVN重新设置用户名和密码

    在第一次使用TortoiseSVN从服务器CheckOut的时候,会要求输入用户名和密码,这时输入框下面有个选项是保存认证信息,如果选了这个选项,那么以后就不用每次都输入一遍用户名密码了. 不过,如果 ...

  9. 出现xml错误的时候都是配置文件的名字没有改造成的

    The error may exist in com/bjpowernode/dao/PlayerDao.xml

  10. Lua中assert( )函数的使用

    当Lua遇到不期望的情况时就会抛出错误,比如:两个非数字进行相加:调用一个非函数的变量:访问表中不存在的值等.你也可以通过调用error函数显示的抛出错误,error的参数是要抛出的错误信息. ass ...