vue钩子函数和computed执行顺序,computed不能操作dom的原因

vue钩子函数和computed执行顺序,computed不能操作dom的原因

  • 在项目中遇到这样的问题,在一个组件的computed中使用$refs操作dom,但是会返回undefined,于是修改了一下,在组件的mounted先执行" this.nameDom= ‘this.refs.nameLine’ ",将dom元素赋值到一个data值上,然后在computed中使用this.nameDom,这样就不报错了,之后想到了是不是因为computed和mounted执行顺序问题导致的,这里做一个记录。
  • 做了一个demo,结果发现computed是在beforeMount和mounted这两个钩子函数中间执行的因为vue只能在mounted中操作dom,而computed在mounted之前执行,因此在computed中不能操作dom。如果想要在其他钩子函数或者computed中操作dom,可以通过使用$nextTick()方法操作dom。

结果图如下:
在这里插入图片描述
代码如下:

<template>
    <div>
        {{sizeNum}}
    </div>
</template>

<script>
export default {
    data() {
        return {
            citySize: 12
        }
    },

    computed: {
        sizeNum() {
            console.log('computed')
            return this.citySize
        }
    },
 
    beforeCreate() {
        console.log('beforeCreate')
    },
    created() {
        console.log('created')
    },

    beforeMount() {
        console.log('beforeMount')
    },

    mounted() {
        console.log('mounted')
    }
}
</script>
发布了41 篇原创文章 · 获赞 3 · 访问量 6391

猜你喜欢

转载自blog.csdn.net/weixin_40509884/article/details/100664221
今日推荐