我想知道在呈现页面之前,我想向服务器发送一个异步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()执行之后进行处理.


那么,什么应该指导你的决定呢?

Vue.js相关问答推荐

如何使用composition api v-model Select 框获取其他JSON 值?

点击屏幕的任何位置都会禁用v-overlay

如果似乎没有明确使用输入事件,那么发出输入事件有什么作用?

过渡如何在 Vue JS 3 中的图像上工作?

Vuetify 复选框未正确显示值

在 Vue 中更改 json 数据后,如何在屏幕上重新呈现表格组件?

在 Vue 项目之间共享assets和组件

VueJs this.method 不是函数?如何在 Vuejs 的另一个方法中调用一个方法?

带有外部配置文件的 Vue js

如何创建 vuetify 工具栏链接下拉菜单?

使用 Vee-Validate 在提交时验证子输入组件

在 Vue.js 中,为什么我们必须在导入组件后导出它们?

为什么我在 vue.js 中得到避免使用 JavaScript 一元运算符作为属性名称?

如何在 Vuex 中获取 Vue 路由参数?

Vuex 存储数据总是驻留在内存中?

中文而不是英文的Element UI分页

如何让 vuetify 数据表在卡片内时跨越容器的整个宽度?

Vue 2.0 设置路由 - 不要使用new来产生副作用

IOS在输入焦点上显示键盘

Vue.js 中的条件 依赖于props值?