vuejs基础复习4---生命周期函数

生命周期函数

vue框架内部提供的一系列函数,主要用于vue创建的实例在挂载到页面以及从页面销毁这一过程中,我们要进行一些操作时所使用的函数。

所有生命周期函数

beforeCreate

在实例初始化之后,数据观测 (data observer) 和 event/watcher 事件配置之前被调用

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
...
<body>
<div id="app">
{{name}}
</div>
<script src="https://cdn.bootcss.com/vue/2.6.10/vue.js"></script>
<script>
let app = new Vue({
el: '#app',
data: {
name: '生命周期函数'
},
mthods:{
sayHi(){
console.log('hi');
}
},
beforeCreate() {
console.log(this.sayHi);// undefined
console.log(this.name);// undefined
console.log('beforeCreate');
}
})
</script>
</body>
...

created

在实例创建完成后被立即调用。已经可以获取实例的data、methods、watch。但是不能获取实例根节点

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
...
<body>
<div id="app">
{{name}}
</div>
<script src="https://cdn.bootcss.com/vue/2.6.10/vue.js"></script>
<script>
let app = new Vue({
el: '#app',
data: {
name: '生命周期函数'
},
methods: {
sayHi() {
return 'hi'
}
},
created() {
console.log(this.name); // 生命周期函数
console.log(this.$el);// undefind
console.log(this.sayHi());// hi
}
})
</script>
</body>
...

beforeMount

这一步生成虚拟dom,准备将其渲染到页面,但还未渲染

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
<body>
<div id="app">
{{name}}
</div>
<script src="https://cdn.bootcss.com/vue/2.6.10/vue.js"></script>
<script>
let app = new Vue({
el: '#app',
data: {
name: '生命周期函数'
},
methods: {
sayHi() {
return 'hi'
}
},
beforeMount() {
console.log(this.name); // 生命周期函数
console.log(this.$el);
/*
<div id="app">
{{name}}
</div>
*/
console.log(this.sayHi()); // hi
console.log(this.$refs.demo);// undefind
}
})
</script>
</body>

mounted

将虚拟DOM根据el挂载到对应HTML中,将虚拟dom渲染到页面,已经完成

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
<body>
<div id="app">
{{name}}
<p>dmeo</p>
</div>
<script src="https://cdn.bootcss.com/vue/2.6.10/vue.js"></script>
<script>
let app = new Vue({
el: '#app',
data: {
name: '生命周期函数'
},
methods: {
sayHi() {
return 'hi'
}
},
mounted() {
console.log(this.name); // 生命周期函数
console.log(this.$el);
/*
<div id="app">
{{name}}
</div>
*/
console.log(this.sayHi()); // hi
console.log(this.$refs.demo);// <p>dmeo</p>
}
})
</script>
</body>

beforeUpdate

当data中的数据更新后,虚拟DOM更新前

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
<body>
<div id="app">
<p id="p">
{{name}}
</p>
<button @click='update'>更新</button>
</div>
<script src="https://cdn.bootcss.com/vue/2.6.10/vue.js"></script>
<script>
let app = new Vue({
el: '#app',
data: {
name: '生命周期函数'
},
methods: {
update() {
this.name = 'update';
}
},
beforeUpdate() {
console.log(document.getElementById('p').innerText); //生命周期函数
console.log(1);
}
})
</script>
</body>

updated

数据更新完毕,且虚拟dom完成在页面的渲染之后执行

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
<body>
<div id="app">
<p id="p">
{{name}}
</p>
<button @click='update'>更新</button>
</div>
<script src="https://cdn.bootcss.com/vue/2.6.10/vue.js"></script>
<script>
let app = new Vue({
el: '#app',
data: {
name: '生命周期函数'
},
methods: {
update() {
this.name = 'update';
}
},
updated() {
console.log(document.getElementById('p').innerText); //update
console.log(1);
}
})
</script>
</body>

bdeforeDestroy

当调用vm.$destroy()销毁组件时,销毁前使用,这时data、methods、虚拟dom都可以使用

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

<body>
<div id="app">
<p id="p">
{{name}}
</p>
<button @click='update'>卸载</button>
</div>
<script src="https://cdn.bootcss.com/vue/2.6.10/vue.js"></script>
<script>
let app = new Vue({
el: '#app',
data: {
name: '生命周期函数'
},
methods: {
update() {
this.$destroy();
}
},
beforeDestroy() {
console.log(this.name);//生命周期函数
console.log(this.$el);//<div id=​"app">​…​</div>​
console.log(this.update);
/* ƒ update() {
this.$destroy();
}*/
}
})
</script>
</body>

destroyed

彻底销毁完毕时使用

小结

上述就是官方规定的生命周期函数,但大体来看生命周期函数的特点就是会在实例的某个阶段自动调用,这样看watch,computed也应该算。

常见使用场景

个人使用过的

created

  • ajax请求

mounted

  • 挂载元素内dom节点的获取

updated

  • 任何数据的更新,如果要做统一的业务逻辑处理

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!