• Vue核心 Vue生命周期


    生命周期

    每个 Vue 实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听、编译模板、将实例挂载到 DOM 并在数据变化时更新 DOM 等。同时在这个过程中也会运行一些叫做生命周期钩子的函数,这给了用户在不同阶段添加自己的代码的机会。

    • 又名生命周期回调函数、生命周期函数、生命周期钩子

    • 是什么:Vue在关键时刻帮我们调用的一些特殊名称的函数

    • 生命周期函数的名字不可更改,但函数的具体内容是程序员根据需求编写的

    • 生命周期函数中的 this 指向是vm或组件实例对象

    比如 created 钩子可以用来在一个实例被创建之后执行代码:

    new Vue({
      data: {
        a: 1
      },
      created: function () {
        // `this` 指向 vm 实例
        console.log('a is: ' + this.a)
      }
    })
    // => "a is: 1"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    也有一些其它的钩子,在实例生命周期的不同阶段被调用,如 mountedupdateddestroyed。生命周期钩子的 this 上下文指向调用它的 Vue 实例。

    不要在选项 property 或回调上使用箭头函数,比如 created: () => console.log(this.a)vm.$watch('a', newValue => this.myMethod())。因为箭头函数并没有 thisthis 会作为变量一直向上级词法作用域查找,直至找到为止,经常导致 Uncaught TypeError: Cannot read property of undefinedUncaught TypeError: this.myMethod is not a function 之类的错误。

    生命周期图示

    生命周期图示

    <title>分析生命周期</title>
    	<script type="text/javascript" src="../js/vue.js"></script>
    
    	<div id="root" :x="n">
    		<h2 v-text="n"></h2>
    		<h2>当前的n值是:{{ n }}</h2>
    		<button @click="add">点我n+1</button>
    		<button @click="bye">点我销毁vm</button>
    	</div>
    
    <script type="text/javascript">
    	Vue.config.productionTip = false
    
    	new Vue({
    		el: '#root',
    		// template:`
    		// 	<div>
    		// 		<h2>当前的n值是:{{n}}</h2>
    		// 		<button @click="add">点我n+1</button>
    		// 	</div>
    		// `,
    		data: {
    			n: 1
    		},
    		methods: {
    			add() { console.log('add')
    				this.n++
    			},
    			bye() {
    				console.log('bye')
    				this.$destroy()
    			}
    		},
    		watch: {
    			n() {
    				console.log('n变了')
    			}
    		},
    		beforeCreate() {console.log('beforeCreate')},
    		created() {console.log('created')},
    		beforeMount() {console.log('beforeMount')},
    		mounted() {console.log('mounted')},
    		beforeUpdate() {console.log('beforeUpdate')},
    		updated() {console.log('updated')},
    		beforeDestroy() {console.log('beforeDestroy')},
    		destroyed() {console.log('destroyed')},
    	})
    </script>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48

    总结生命周期

    常用的生命周期钩子

    a. mounted发送ajax请求、启动定时器、绑定自定义事件、订阅消息等初始化操作
    b. beforeDestroy清除定时器、解绑自定义事件、取消订阅消息等收尾工作

    关于销毁Vue实例

    a. 销毁后借助Vue开发者工具看不到任何信息
    b. 销毁后自定义事件会失效,但原生DOM事件依然有效
    c. 一般不会在beforeDestroy操作数据,因为即便操作数据,也不会再触发更新流程了

  • 相关阅读:
    leetcode每天5题-Day33
    数字图像处理(入门篇)目录
    2023国自然淘金:m6A与糖酵解、铁死亡和巨噬细胞如何强强联姻?
    安卓有哪些耳机好用?好用的安卓蓝牙耳机推荐
    Win10安装node-sass
    【C语言 模拟实现memcpy函数、memcpy函数】
    【RPC】动态代理及源码分析
    .Net与AI的强强联合:AntSK知识库项目中Rerank模型的技术突破与实战应用
    同步请求和异步请求(利用axios)
    京东大佬整理的亿级流量架构核心技术,助力智能时代,成就非凡
  • 原文地址:https://blog.csdn.net/agonie201218/article/details/125532183