vuex简单了解一下

一、vuex是什么?

  vuex是一个为vue.js应用程序开发的状态管理模式,它采用集中式存储管理应用的所有组件的状态,并以响应的规则保证状态以一种不可预测的方式发生变化。

  简单来说:vuex就是把需要共享的变量全部存储在一个对象中,然后将这个对象放在顶层组件中供给其他组件使用。vue比作js文件,组件是函数,vuex是全局变量,只是vuex包含了一些特定的规则而已。

二、vuex的五个基本对象是什么?

 

const store = new Vuex.Store({
 state: {
 name: 'weish',
 age: 22
 },
 getters: {
 personInfo(state) {
 return `My name is ${state.name}, I am ${state.age}`;
 }
 }
 mutations: {
 SET_AGE(state, age) {
 commit(age, age);
 }
 },
 actions: {
 nameAsyn({commit}) {
 setTimeout(() => {
 commit('SET_AGE', 18);
 }, 1000);
 }
 },
 modules: {
 a: modulesA
 }
}

 

  state:     存储状态,也是变量;

  getter:  对state里面的属性进行计算,访问vuex中的属性都需要getter获取。getter需要单独成一个文件

        外部调用方式:store.getters.personInfo()。

   mutations:  提交状态修改。是唯一修改state的方式,但不支持异步操作。

          更改 Vuex 的 store 中的状态的唯一方法是提交 mutation

  Action:  提交的是mutation,而不是直接改变状态;

        action可以包含异步操作

        外部调用方式:store.dispatch('nameAsyn')。

  modules:  stote的子模块,内容相当于store的一个实例。

          外部调用方式:store.a.getters.xxx()。

  异步:dispatch一个action,commit一个mutation

state

state:{
  userViews:[],
}

mutations

ADD_USERID(state,name){
 if (state.userViews.some(v => v.name=== name.fullName)) return
      state.userViews.push(name)
}
 

actions

addUserid({commit},name){
  return new Promise((resolve,reject)=>{
  commit ('ADD_USERID',name)
  resolve("success")
})
}

getters.js

 
let getters = {
  userViews: state => state.app(*state.action等所在的文件夹名称*).userViews,
}
export default getters

 

在页面中引用各个模块

state

第一种方式:<h3>当前最新的count是:{{this.$store.state.count}}</h3>}

第二种方式:对象展开运算符

import { mapState  } from 'vuex'
computed:{
    ...mapState(['subCount']),
},
页面中:
<h3>当前最新的subCount是:{{subCount}}</h3>

mutations

第一种方式:

import { mapMutations } from 'vuex'
methods:{
        ...mapMutations(['sub','subN']),
}
页面:
<button @click="sub">-1</button>
<button @click="subN(3)">-N</button>

<button @click="handelAdd">+1</button>
<button @click="handelAdd1">+N</button>
methods:{
handelAdd(){
    this.$store.commit('add')
},
handelAdd1(){
    this.$store.commit('addN',3)
},
}

actions

第一种方式:

import {  mapActions } from 'vuex'
methods:{
     ...mapActions(['subAsyns','subNAsyns']),
}
页面:
<button @click="subAsyns">-1 Asyns</button>
<button @click="subNAsyns(3)">-N Asyns</button>

第二种方式:

<button @click="handelAdd2">+1 Async</button>
<button @click="handelAdd3">+N Async</button>
methods:{
handelAdd2(){
// dispatch来触发actions里面某个函数
this.$store.dispatch('addAsync')
},
handelAdd3(){
this.$store.dispatch('addNAsync',3)
}
}

getters

第一种方式:

import {mapGetters } from 'vuex'
computed:{
    ...mapGetters(['show2Num'])
},

页面:
<h1>{{show2Num}}</h1>

 

posted @ 2020-07-23 17:09  柠檬IT  阅读(273)  评论(0编辑  收藏  举报