我想知道在呈现页面之前,我想向服务器发送一个异步GET请求,以检索数据并填充数据中的属性.我听说最好的方法是在Vue js提供的三个生命周期挂钩中调用发送此请求的函数,这三个挂钩在呈现DOM之前运行.三个是beforeCreate()
、created()
、beforeMount()
.理想情况下,这个请求必须打给哪一个?为什么?
我想知道在呈现页面之前,我想向服务器发送一个异步GET请求,以检索数据并填充数据中的属性.我听说最好的方法是在Vue js提供的三个生命周期挂钩中调用发送此请求的函数,这三个挂钩在呈现DOM之前运行.三个是beforeCreate()
、created()
、beforeMount()
.理想情况下,这个请求必须打给哪一个?为什么?
TL;DR在一般(安全)情况下,使用
created()
.
Vue的初始化代码是同步执行的.
从技术上讲,在beforeCreate()
、created()
、beforeMount()
中运行的任何异步代码都只会在其中all个钩子完成后响应.请参见演示:
new Vue({
el: '#app',
beforeCreate() {
setTimeout(() => { console.log('fastest asynchronous code ever') }, 0);
console.log('beforeCreate hook done');
},
created() {
console.log('created hook done');
},
beforeMount() {
console.log('beforeMount hook done');
},
mounted() {
console.log('mounted hook done');
}
})
<script src="https://unpkg.com/vue/dist/vue.min.js"></script>
<div id="app">
Check the console.
</div>
换句话说,如果在beforeCreate()
中进行Ajax调用,不管API的响应速度有多快,响应只会在created()
执行之后进行处理.
那么,什么应该指导你的决定呢?
beforeCreate()
data
right away?
created()
?
beforeMount()