vuex(简)

计算属性:

什么是计算属性:

用于简单运算的

模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的。在模板中放入太多的逻辑会让模板过重且难以维护。

计算属性的使用:

在一个计算属性里可以完成各种复杂的逻辑,包括运算、函数调用等,只要最终返回一个结果就可以。

语法:

 computed: {
        属性名 () {
            // `this` 指向 vm 实例
            return this.message.split('').reverse().join('')
        }
    }

调用计算属性的的时候直接{{属性名}}即可 

或者是this.属性名

每一个计算属性都包含一个getter 和一个setter ,我们一般使用的是计算属性的默认用法, 只是利用了getter 来读取。

在你需要时,也可以提供一个setter 函数, 当手动修改计算属性的值就像修改一个普通数据那样时,就会触发setter 函数,执行一些自定义的操作,

var vm = new Vue({
    el: '#demo',
    data: {
        firstName: 'Foo',
        lastName: 'Bar'
    },
    computed: {
        fullName: {
            // getter
            get: function () {
                return this.firstName + ' ' + this.lastName
            },
            // setter
            set: function (newValue) {
                var names = newValue.split(' ');
                this.firstName = names[0];
                this.lastName = names[names.length - 1];
            }
        }
    }
});

绝大多数情况下,我们只会用默认的getter 方法来读取一个计算属性,在业务中很少用到setter,所以在声明一个计算属性时,可以直接使用默认的写法,不必将getter 和setter 都声明。

计算属性缓存 

  我们可以将同一函数定义为一个方法而不是一个计算属性,两种方式的最终结果确实是完全相同的。只是一个使用reverseTitle()取值,一个使用reverseTitle取值。

  然而,不同的是计算属性是基于它们的依赖进行缓存的。计算属性只有在它的相关依赖发生改变时才会重新求值。

  这就意味着只要 title还没有发生改变,多次访问 reverseTitle计算属性会立即返回之前的计算结果,而不必再次执行函数。

<div>{{reverseTitle()}}</div><br><br>
  
// 在组件中
methods: {
  reverseTitle: function () {
    return this.title.split('').reverse().join('')
  }
},
computed:{
  reverseTitle(){
     return this.title.split('').reverse().join('')
  }
}

我们为什么需要缓存?

假设我们有一个性能开销比较大的的计算属性 A,它需要遍历一个巨大的数组并做大量的计算。然后我们可能有其他的计算属性依赖于 A 。如果没有缓存,我们将不可避免的多次执行 A 的 getter!如果你不希望有缓存,可以用方法来替代。

计算属性禁用箭头函数

  注意,不应该使用箭头函数来定义计算属性函数 (例如 aDouble: () => this.a * 2)。理由是箭头函数绑定了父级作用域的上下文,所以 this 将不会按照期望指向 Vue 实例,this.a 将是 undefined

https://v3.vuex.vuejs.org/zh

安装vuex

npm install vuex --save

开始使用

commit: 同步操作

存储:

this.$store.commit('mutations名字',name)

取值

this.$store.state.state中的key

dispatch: 异步操作

存储

this.$store.dispatch('action的名字',name)

取值

this.$store.getters.getters中的名字

commit 和dispatch的区别在于commit是提交mutatious的同步操作,dispatch是分发actions的异步操作

action不能直接修改state值

action 必须通过提交mutation来更新state

只有mutation才能更新state

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

const store = new Vuex.Store({
  state: {
    count: 0
  },
  mutations: {
    increment (state) {
      state.count++
    }
  }
})

存值:

<template>
  <div class="about">
    <button @click="addCount">按钮</button>
    {{count}}
  </div>
</template>
<script>
    export default{
        data(){
            return {
                count:1
            }
        },
        methods:{
            addCount(){
                this.count=this.count+1;
                this.$store.dispatch('increment',this.count);
                alert(this.$store.getters.increment);
            }
        }
        
    }
</script>

取值:

<template>
  <div class="home">
      数字:{{count}}
   
  </div>
</template>

<script>

export default {
  computed:{
      count(){
          return this.$store.getters.increment;
      }
  }
}
</script>

state:需要管理的全局data

mutations:定义改变全局data的方法,Mutation 必须是同步函数

actions:同mutation类似,也是定义修改全局data的方法,不同的是可以进行异步操作

getters:可以理解成vuex的computed计算属性,state发生变化他也会同步发生变化

modules:可以对vuex的state进行分模块管理

import handle from './handle'
modules: {
handle
    }
}) 

handle.js:

let state = {
    list: []
}

let mutations = {
    getList (state, info) {
        state.list = info
    }
}

export default {
    state: state,
    mutations
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值