• 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>
  • 相关阅读:
    设置全屏的方法
    The connection to adb is down,and a server error has occured.解决办法---------------------亲测有效
    android 案例二 登录界面
    javaweb项目编译错误
    Ubuntu 14.04 tomcat配置
    Ubuntu 14.03 安装jdk
    Ubuntu 14.03 安装mysql
    Git 版本管理使用说明。
    getColor问题
    WebView 调试
  • 原文地址:https://www.cnblogs.com/yjf713/p/13367400.html
Copyright © 2020-2023  润新知