vue页面初始化请求一般放在哪个生命周期里呢?

我一般都放在mounted里面,这样会不会白屏时间过长呢?放在其他什么周期会不会造成二次渲染呢

这是之前面试遇到的问题,我对这方面不太了解

阅读 13.9k
6 个回答
生命周期 响应类型
beforeCreate 拿不到任何信息,无法篡改数据,一般做loding,这个时候的vue实例还什么都没有,但是$route对象是存在的,可以根据路由信息进行重定向之类的操作
created $el,没有初始化,数据已加载完成,阔以篡改数据,并更新,不会触发beforeUpdate,updated,在这结束loading,还做一些初始化,实现函数自执行 ,$ref属性内容为空数组
beforeMount $el已被初始化,,数据已加载完成,阔以篡改数据,并更新,不会触发beforeUpdate,updated,在挂载开始之前被调用,beforeMount之前,会找到对应的template,并编译成render函数
mounted $el已被初始化,,数据已加载完成,阔以篡改数据,并更新,并且触发beforeUpdate,updated,在这发起后端请求,拿回数据,配合路由钩子做一些事情,$ref属性可以访问

综上所述:
created 阔以做简单的请求,但不能操作dom
mounted dom已拿到,如需操作dom阔以在这里发起请求

看实际情况吧,一般create 和mounted 都可以,区别是create 页面还没渲染如果要操作dom节点的话没法找到dom,我一般在mounted中初始化请求

防止二次渲染可以看下keep-alive。https://cn.vuejs.org/v2/api/#...

放在那里都行吧 就算放在created里,你这个是个异步 有可能mounted了以后才返回数据也有可能之前
个人喜好吧

===============

白屏可以用骨架屏解决,二次渲染的话你是指data中定义的数据渲染了 然后请求回来改变了data的数据又渲染了一遍么..

created 和 mounted 都行,白屏时间是组件的加载速度, 加载完了是有初始值和 loading动画的;
除非是非异步数据,才不会造成二次渲染

1: created 方请求是最好的
2: mounted 是dom渲染完毕
3: dom渲染完毕, 你再去请求数据就会有空壳dom的情况, 影响造型

我的做法是这样:
async created() {

await this.initData() // 数据初始化的接口

},

我觉得这样既不会造成多次渲染,也避免了放在mounted中导致的页面更新不及时

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题