vueX基础知识点笔记

vuex是专门用来管理vue.js应用程序中状态的一个插件。他的做用是将应用中的全部状态都放在一块儿,vue

集中式来管理。须要声明的是,这里所说的状态指的是vue组件中data里面的属性。简单的来讲,vuex

它就是存储公共变量的东西,而后插件能够经过它来访问,或者修改数据,来达到响应式.npm

至关于一个仓库,里面能够放不少公共的东西,而这些公共的东西均可以让组件使用.学习

 

首先作这个以前,咱们下载好vuex插件,怎么下载呢 用到咱们的npm run vuex --savethis

下载好 开始配置spa

首先在src文件下建立个store文件 里面再新建一个index.js插件

1. 导入Vue--->import Vue from "vue"调试

2. 导入Vuex--->import Vuex form "./vuex"code

3. Vue.use(Vuex)orm

4.

export default new Vuex.Store({

  state:{},

  mutations:{},

  getters:{}

  actions:{},

  modules:{}

})

这就是vueX的配置环境

在这里咱们须要注意,咱们用的是Vuex.Store这个功能,因此在新建时用的Vuex.Store,

就是为了在全部组件中使用均可以有这个方法.

 

接下来咱们介绍一下vuex的属性

state:

一个项目里面,只有一个store,不要创建多个store,全部的数据放在state中就能够了.(单一数据源state)

getters:

数据须要通过一系列变化,而后经过使用getters定义一个方法,而后调用的时候经过$store.getters.方法名来调用

 

经过三个小例子带着了解一下getters属性

state定义了students的信息以下

students: [ { id: 110, name: "juelebao", age: 17 }, { id: 111, name: "zhangsan", age: 19 }, { id: 112, name: "liuyifei", age: 21 }, { id: 113, name: "zhoujielun", age: 24 } ]

 

三个小要求:

1. 咱们如今须要将学生信息里面年龄超过20的取出来

2. 取出超过20岁学生的个数

3. 咱们想要经过id进行查询,须要往里面传参数

以上要求均要经过vuex里面的getters属性定义方法

第一个: 须要将学生信息里面年龄超过20的取出来

over20(state){

return state.students.filter( obj =>{

return obj.age>20

})

}

定义这样一个方法就能够了,调用时$store.getters.over20

第二个: 取出超过20岁学生的个数

方法一:

over20count(state){   return state.students.filter( obj=> {     return obj.age > 20 }).length }

 

 

方法二: 告诉咱们也能够调用getters里面的方法

over20count(state,getters){   return getters.over20.length }

 

方法三:在调用的时候加length 也就是 $store.getters.over20.length

固然,咱们这些方法在正确调用后,就能够获得结果了

 

这就是getter一些用法了

 

简单举个例子以前作过的计数器

咱们如今将计算器封装成一个组件,而后咱们将他放到挂载的页面上

connter.vue代码以及另外一组件(组件2个共用vuex中的数据)

 

 

 

 

这里咱们将connter放在state中,将事件方法放在mutations中,

  注意,咱们在建立increment和decrement事件的时候,传入了state,若是你不写的话,虽然不会报错,可是页面会没有任何变化.因此必需要有一个参数接收,而后利用接收的参数去访问connter变量.而后咱们就去connter组件中定义两个事件了,add和down,固然咱们是经过在方法中使用this.$store.commit("vuex中的mutations中的事件类型")好比个人add中的this.$store.commit("increment")而后就至关于执行了increment这个操做.

疑问: 在组件中如何访问呢?

  在组件中,咱们能够这样访问 $store.state.connter在down中用法和add同样

 注意:

咱们能够经过mutations方式改变数据,而非直接改变数据$store.state ++,这是由于这样vuex对象能够监听或者追踪到数据的改变. 方便咱们的调试这就是vuex最基本的一个使用了

补充:mutations 携带参数用法

mutations是vuex惟一的提交更新的一种方式,在从此写项目的时候,若是要用vuex咱们必需要用这种方式来对数据进行更新. 不能越过这个直接进行更改.

下面,咱们仍是来学习mutations携带参数的用法

仍是计数器,咱们如今想用动态传递参数的方式来进行计数,好比count为任意数时上代码吧 借助代码帮咱们理解

组件connter中

<button @click="incrementCount(5)">+5</button>

 <button @click="incrementCount(10)">+10</button>
 methods:{ incrementCount(count){ this.$store.commit("decrementCount",count) } }

vuex中的mutations:

 decrementCount(state,count){ state.connter+=count }

这样咱们就能够进行参数传递了.

二个例子,就是咱们可不能够传递学生的信息?答案确定是能够的

例如代码:

addStu(){   var stu = { id : 114,name:"lisi",age: 21 }   this.$store.commit("addStud",stu) }

结合vuex中的mutations定义的

addStu(state,stu){   state.students.push(stu) }

关于mutation的提交风格

这里面的参数pyload被称为负载,就是讲这个地方的数据上传,能够是对象,能够是一个值

若是是学生信息的话直接就传过去一个对象就能够

第一种:

fucn(){

      this.$store.commit("事件类型",pyload)

    }

第二种:

fucn(){

this.$store.commit({

type:"事件类型",

pyload:pyload

})

}

两种分隔写法不同,在vuex中的mutations中接收值也是不同的

第一种方式接收的时候,pyload是什么就是什么

第二种方式接收的时候,pyload是整个的一个对象.

 这样咱们就搞定了mutations携带参数了,注意一下,在mutations中定义的方法,里面的参数第一个参数就是state不能改变.

今天简单总结了下,还有一些属性尚未学,明天学了再拿出来.

相关文章
相关标签/搜索