组件中函数的执行顺序

1. 生命周期函数除了beforeCreate,其他的都是在Vue实例创建完成之后执行

2. 组件中data是一个函数,每次路由切换回来时,都会执行data函数,并会初始化data中的值

(1)data中的数据还有一个特点:如果值是原始值不是响应式的。比如下面的代码中,通过点击事件使vuex中的this.$store.state.login发生变化,但是data中的storeValue是原始,所以不响应式的改变。不过,当页面从别的页面切换到该页面的时候,即该组件重新加载渲染一次时,storeValue: this.$store.state.login会获取已经变化后的值,数据进行渲染挂在。

    data () {
      return {
        storeValue: this.$store.state.login ,//(2)从store中获取该值
      }
    },
    methods: {
      handleClick () {
        this.$store.state.login = this.$store.state.login + '1'
        console.log(this.$store.state.login)
      }
    },

(2)data中的数据是引用值的时候,页面中的数据是响应式的改变:

<template>
<div @click="handleClick">
  <span v-if="storeValue">用户已登录</span>
  <span v-else>用户未登录,请登录</span>
  <p>{{storeValue}}</p>
  <ul>
    <li v-for="(list, index) in listsValue" :key="index">{{index}}、{{list}}</li>
  </ul>
</div>

</template>

<script>
export default {
    data () {
      return {
        storeValue: this.$store.state.login ,//(2)从store中获取该值
        listsValue: this.$store.state.lists
      }
    },
    methods: {
      handleClick () {
        this.$store.state.login = this.$store.state.login + '1'
        console.log(this.$store.state.login)
        this.$store.state.lists.push('5');
      }
    },
    created () {
 
    }
    
}
</script>

 

结果:每次点击div,都会响应式的添加值

(3)如何解决data中的原始值不响应式的改变???

用computed计算属性,来代替data函数

    computed: {
      storeValue () {
        return this.$store.state.login //从store中获取该值,并使页面响应式改变。
      }
    },

注意:data中的属性优先级高于computed计算属性

3. methods对象虽然比created和mounted等生命周期函数创建的早,但是,methods内的一些函数需要在用户操作后执行,比如click事件,所以created和mounted等生命周期函数比methods内的这些方法先执行。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值