• vuex的使用


    什么是Vuex?

    官方说法:Vuex 是一个专为 Vue.js应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

    人为理解:Vuex是用来管理组件之间通信的一个插件

    为什么要用Vuex?

     我们知道组件之间是独立的,组件之间想要实现通信,我目前知道的就只有props选项,但这也仅限于父组件和子组件之间的通信。如果兄弟组件之间想要实现通信呢?嗯..,方法应该有。抛开怎么实现的问题,试想一下,当做中大型项目时,面对一大堆组件之间的通信,还有一大堆的逻辑代码,会不会很抓狂??那为何不把组件之间共享的数据给“拎”出来,在一定的规则下管理这些数据呢? 这就是Vuex的基本思想了。

    怎么使用Vuex?(安装vuex之后)

    import Vue from 'vue' 
    import Vuex from 'vuex'  //引入vuex  vuex是基于vue存在的
    
    let store = new Vuex.Store({
        state,
        mutations,
        getters,
        actions
    })
    //创建vuex实例
    
    new Vue({
      el: '#app',
      router,
      store, //并在vue实例中挂载
      render: h => h(App)
    })
    

      

    new Vuex.Store({}) 表示创建一个Vuex实例,通常情况下,他需要注入到Vue实例里. Store是Vuex的一个核心方法,字面上理解为“仓库”的意思。Vuex Store是响应式的,当Vue组件从store中读取状态(state选项)时,若store中的状态发生更新时,他会及时的响应给其他的组件(类似双向数据绑定) 而且不能直接改变store的状态,改变状态的唯一方法就是,显式地提交更改(mutations选项)

    Vuex有4个核心选项:state mutations  getters  actions   

    state的使用 :用来存放组件之间共享的数据。他跟组件的data选项类似,只不过data选项是用来存放组件的私有数据。

    let state = {
        count : 0,
     
    }
    //在state这个对象中存放一个数据
    
    //在标签中用this.$store.state.count输出
    
    <p>
                {{this.$store.state.count}}
     </p>
    

     mutation的使用 :在 Vuex store 中,实际改变 状态(state) 的唯一方式是通过 提交(commit) 一个 mutation。  mutations下的函数接收state作为参数,接收一个叫做payload(载荷)的东东作为第二个参数,这个东东是用来记录开发者使用该函数的一些信息,比如说提交了什么,提交的东西是用来干什么的,包含多个字段,所以载荷一般是对象(其实这个东西跟git的commit很类似)还有一点需要注意:mutations方法必须是同步方法

    //在组件中想要使用方法 给state中的数据+10,但是在method中写的只是改变了视图上的值,并不是数据本身
    <p>
             {{this.$store.state.count}}
      </p>
      <p>
              <button @click="add">+10</button>
      </p>
    
    methods: {
            add(){
                //将这个方法提交给oadd这个方法
                this.$store.commit('oadd',10)
            },
      },
    
    
    //在mutations中 写oadd
    let mutations = {
        oadd(state,n){
            state.count+=n
        },
    
    }   
    

     getters的使用:类似于vue的计算属性

    //在state中有一个数组
    let state = {
       arr : [1,2,3,4,5,6],
    
    }
    
    在getters中这个数组进行逻辑编写
    let getters = {
        doarr : state=>{
            return state.arr.map(item => {
                return item*10
            });
        }
    }
    
    在组价中输出
    <p>
           {{this.$store.getters.doarr}}
     </p>
    

    action的使用 :

    actions和mutations的区别

    1.Actions 提交的是 mutations,而不是直接变更状态。也就是说,actions会通过mutations,让mutations帮他提交数据的变更。

    2.Action 可以包含任意异步操作。

    let state = {
    
        color : "red"
    
    } //在state定义一个color数据
    
    //在视图中使用这个颜色数据
    <p class="color" :style="{color:this.$store.state.color}">
           color
     </p>
     <p>  //点击按钮三秒后换字体颜色
          <button @click="change">change</button>
     </p>
    
    //先在method中将方法使用disoatch给actions里定义的thechange
     methods: {
            change(){
                this.$store.dispatch('thechange')
            }
        },
    
    
    //在mutations中写逻辑代码
    let mutations = {
        ochange(state){
            state.color = "pink"
        }
    }
    
    //在actions中实现这个异步方法
    let actions = {
        thechange({commit}){
            setTimeout(()=>{
                commit('ochange')
            },3000)
        }
    }
    

      

     

  • 相关阅读:
    GPUImage源码解读之GPUImageFramebuffer
    CSS之定位
    CSS之浮动
    CSS之盒子模型
    CSS之元素
    CSS之选择器
    iOS图片瘦身总结
    iOS动画——CoreAnimation
    iOS动画——DynamicAnimate
    iOS动画——UIKit动画
  • 原文地址:https://www.cnblogs.com/qinlinkun/p/11385061.html
Copyright © 2020-2023  润新知