谈一谈vue请求数据放在created好还是mounted里好


Posted in Javascript onJuly 27, 2020

建议放在created里

created:在模板渲染成html前调用,即通常初始化某些属性值,然后再渲染成视图。

mounted:在模板渲染成html后调用,通常是初始化页面完成后,再对html的dom节点进行一些需要的操作。

如果在mounted钩子函数中请求数据可能导致页面闪屏问题

其实就是加载时机问题,放在created里会比mounted触发早一点,如果在页面挂载完之前请求完成的话就不会看到闪屏了

补充知识:vue各阶段数据可使用情况:created,computed,data,prop,mounted,methods,watch

created时,可用data和prop中的数据。

computed的属性,当在mounted或者dom中使用到时,才会属性的执行代码。

最后是mouted,可使用前面的数据,并且此时才可以操作dom。

watch不会再创建阶段自动执行,除了添加立即执行这个配置项。

加载顺序:

谈一谈vue请求数据放在created好还是mounted里好

在官方文档中,强调了computed区别于method最重要的两点

computed是属性调用,而methods是函数调用

computed带有缓存功能,而methods不是

计算属性是基于它们的依赖进行缓存的,只有在它的相关依赖发生改变时才会重新求值。

let vm = new Vue({
 el: '#app',
 data: {
  message: '我是消息,'
 },
 methods: {
  methodTest() {
   return this.message + '现在我用的是methods'
  }
 },
 computed: {
  computedTest() {
   return this.message + '现在我用的是computed'
  }
 }
})

这就意味着只要 message 还没有发生改变,多次访问 computedTest计算属性会立即返回之前的计算结果,而不必再次执行函数。

相比而言,只要发生重新渲染,method 调用总会执行该函数。

调用

<div id="app">
 <h1>{{message}}</h1>
 <p class="test1">{{methodTest}}</p>
 <p class="test2-1">{{methodTest()}}</p>
 <p class="test2-2">{{methodTest()}}</p>
 <p class="test2-3">{{methodTest()}}</p>
 <p class="test3-1">{{computedTest}}</p>
 <p class="test3-2">{{computedTest}}</p>
</div>

在HTML的插值里

computed定义的方法我们是以属性访问的形式调用的,{{computedTest}}

但是methods定义的方法,我们必须要加上()来调用,如{{methodTest()}},否则,视图会出现test1的情况,见下图

谈一谈vue请求数据放在created好还是mounted里好

computed的缓存功能

在上面的例子中,methods定义的方法是以函数调用的形式来访问的,那么test2-1,test2-2,test2-3是反复地将methodTest方法运行了三遍,如果我们碰到一个场景,需要1000个methodTest的返回值,那么毫无疑问,这势必造成大量的浪费

更恐怖的是,如果你更改了message的值,那么这1000个methodTest方法每一个又会重新计算。。。。

所以,官方文档才反复强调对于任何复杂逻辑,你都应当使用计算属性

computed依赖于data中的数据,只有在它的相关依赖数据发生改变时才会重新求值

let vm = new Vue({
 el: '#app',
 data: {
  message: '我是消息,'
 },
 methods: {
  methodTest() {
   return this.message + '现在我用的是methods'
  }
 },
 computed: {
  computedTest() {
   return this.message + '现在我用的是computed'
  }
 }
})

如上例,在Vue实例化的时候,computed定义computedTest方法会做一次计算,返回一个值,在随后的代码编写中,只要computedTest方法依赖的message数据不发生改变,computedTest方法是不会重新计算的,也就是说test3-1,test3-2是直接拿到了返回值,而非是computedTest方法重新计算的结果。

这样的好处也是显而易见的,同样的,如果我们碰到一个场景,需要1000个computedTest的返回值,那么毫无疑问,这相对于methods而言,将大大地节约内存

哪怕你改变了message的值,computedTest也只会计算一次而已

computed的其它说明

computed其实是既可以当做属性访问也可以当做方法访问

computed的由来有一个重要原因,就是防止文本插值中逻辑过重,导致不易维护

computed和watch

Vue 提供了一种更通用的方式来观察和响应 Vue 实例上的数据变动:watch 属性,在路由场景有使用:vue学习之router

当你有一些数据需要随着其它数据变动而变动时,你很容易滥用 watch,更好的想法是使用 computed 属性而不是命令式的 watch 回调:

<div id="demo">{{ fullName }}</div>

var vm = new Vue({ 
 el: '#demo', 
data: { 
 firstName: 'Foo',
 lastName: 'Bar', 
  fullName: 'Foo Bar'
 }, 
 watch: { 
 firstName: function (val) { 
  this.fullName = val + ' ' + this.lastName 
 }, 
 lastName: function (val) {  

this.fullName = this.firstName + ' ' + val 
 }
 }
})

上面代码是命令式的和重复的。将它与 computed 属性的版本进行比较:

var vm = new Vue({ 
el: '#demo', 

data: { 


firstName: 'Foo', 


lastName: 'Bar' 

}, 

computed: { 


fullName: function () {  




return this.firstName + ' ' + this.lastName 


} 

}
})

当需要在数据变化时执行异步或开销较大的操作时,使用watch比较合适。

总之:尽量用computed计算属性来监视数据的变化,因为它本身就这个特性,用watch没有computed“自动”,手动设置使代码变复杂。

以上这篇谈一谈vue请求数据放在created好还是mounted里好就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
新浪的图片新闻效果
Jan 13 Javascript
DOM 基本方法
Jul 18 Javascript
jquery 将disabled的元素置为enabled的三种方法
Jul 25 Javascript
js数组循环遍历数组内所有元素的方法
Jan 18 Javascript
模拟一个类似百度google的模糊搜索下拉列表
Apr 15 Javascript
js函数定时器实现定时读取系统实时连接数
Apr 30 Javascript
BootStrap中的表单大全
Sep 07 Javascript
jQuery实现文字自动横移
Jan 08 Javascript
JavaScript校验Number(4,1)格式的数字实例代码
Mar 13 Javascript
Vue+ElementUI使用vue-pdf实现预览功能
Nov 26 Javascript
ant design vue 表格table 默认勾选几项的操作
Oct 31 Javascript
解决elementui表格操作列自适应列宽
Dec 28 Javascript
JS倒计时两种实现方式代码实例
Jul 27 #Javascript
解决vue页面渲染但dom没渲染的操作
Jul 27 #Javascript
解决VUE mounted 钩子函数执行时 img 未加载导致页面布局的问题
Jul 27 #Javascript
Element Breadcrumb 面包屑的使用方法
Jul 26 #Javascript
Element PageHeader页头的使用方法
Jul 26 #Javascript
Element Dropdown下拉菜单的使用方法
Jul 26 #Javascript
Vue中的this.$options.data()和this.$data用法说明
Jul 26 #Javascript
You might like
PHP通过session id 实现session共享和登录验证的代码
2012/06/03 PHP
php preg_replace替换实例讲解
2013/11/04 PHP
php的闭包(Closure)匿名函数详解
2015/02/22 PHP
php带抄送和密件抄送的邮件发送方法
2015/03/20 PHP
关于php中的json_encode()和json_decode()函数的一些说明
2016/11/20 PHP
php array_reverse 以相反的顺序返回数组实例代码
2017/04/11 PHP
phpStudy 2016 使用教程详解(支持PHP7)
2017/10/18 PHP
jQuery实现跨域
2015/02/03 Javascript
JavaScript判断undefined类型的正确方法
2015/06/30 Javascript
JS简单实现城市二级联动选择插件的方法
2015/08/19 Javascript
Javascript类型系统之undefined和null浅析
2016/07/13 Javascript
jQuery中ajax错误调试分析
2016/12/01 Javascript
vuejs实现递归树型菜单组件
2018/01/13 Javascript
快速解决处理后台返回json数据格式的问题
2018/08/07 Javascript
[01:55]2014DOTA2国际邀请赛 BBC正赛第一天总结
2014/07/10 DOTA
[01:33]真香警告!DOTA2勇士令状不朽珍藏Ⅱ饰品欣赏
2018/06/26 DOTA
利用Django内置的认证视图实现用户密码重置功能详解
2017/11/24 Python
python清除字符串中间空格的实例讲解
2018/05/11 Python
详解用Python练习画个美队盾牌
2019/03/23 Python
Python使用pyyaml模块处理yaml数据
2020/04/14 Python
python高级特性简介
2020/08/13 Python
Python pip install之SSL异常处理操作
2020/09/03 Python
微软新西兰官方网站:Microsoft New Zealand
2018/08/17 全球购物
Watch Station官方网站:世界一流的手表和智能手表
2020/01/05 全球购物
请写出char *p与"零值"比较的if语句
2014/09/24 面试题
高级Java程序员面试要点
2013/08/02 面试题
体育专业个人求职信范文
2013/12/27 职场文书
办理居住证介绍信
2014/01/15 职场文书
学生出入校管理制度
2014/01/16 职场文书
本科毕业自我鉴定
2014/03/20 职场文书
大学开学计划书
2014/04/30 职场文书
债务追讨授权委托书范本
2014/10/16 职场文书
教师个人发展总结
2015/02/11 职场文书
创业开店,这样方式更合理
2019/08/26 职场文书
解决jupyter notebook图片显示模糊和保存清晰图片的操作
2021/04/24 Python
MySQL中的全表扫描和索引树扫描
2022/05/15 MySQL