Vue 中 filter 与 computed 的区别与用法解析


Posted in Javascript onNovember 21, 2019

watch与computed、filter:

watch:监控已有属性,一旦属性发生了改变就去自动调用对应的方法

computed:监控已有的属性,一旦属性的依赖发生了改变,就去自动调用对应的方法

filter:js中为我们提供的一个方法,用来帮助我们对数据进行筛选

watch与computed的区别:

1.watch监控现有的属性,computed通过现有的属性计算出一个新的属性

2.watch不会缓存数据,每次打开页面都会重新加载一次,

但是computed如果之前进行过计算他会将计算的结果缓存,如果再次请求会从缓存中
得到数据(所以computed的性能比watch更好一些)

最近遇到一个很不错的候选人,经验丰富,有技术亮点,但在一些细枝末节问题上没有回答的很好,最终还是被刷了。面试过程中有一个问题我印象特别深刻: Vue 中filter与computed属性的区别 ,可惜候选人在现场没有回答上,这里总结一下:

filter 与 computed 的区别

1. 触发时机不同

computed 属性背后的处理逻辑比较复杂,依赖 Vue 的数据更新通知机制,在属性所依赖的其他数据项发生变化时才会重新触发计算。优点是计算频率相对较低;缺点是依赖于组件,难以抽取成独立逻辑,也就是复用性低。

filter 则显的简单很多,只在显式调用时触发,一般应用在模板渲染上。优点是容易在组件外抽象;缺点是每次模板渲染时都需要重新执行计算。可以通过示例 感受调用时机的区别:

Vue 中 filter 与 computed 的区别与用法解析

2. 应用范围不同

computed 很广泛,可以应用在其他computed、methods、生命周期函数、模板;filter 一般只应用于模板渲染上,如果要在其他位置复用,需要使用 this._f 函数:

Vue.component('HelloWorld', {
 filters: {
 hello() {
 return 'hello';
 }
 },
 methods: {
 ping() {
 return `${this._f('hello')()} world`;
 }
 }
})

另外,在使用上filter支持链式调用,这为其增加了组合拼接的能力:

<span> {{ name | normalize | capitalize }} </span>

3. 定义方式

最后需要指出,computed 属性只能在组件内部或通过mixins对象定义;而 filter 有两种定义方式,一是在组件内部通过 filters 属性定义;一是在组件外部通过 Vue.filter 函数定义:

Vue.component('HelloWorld', {
 filters: {
 hello() {
 return 'hello';
 }
 }
});
Vue.filter('hello', ()=> 'hello');

应用规则

综上,filter 无法缓存,调用频率高,因此特别适用于格式化输出场景,比如日期格式化。filter 具有组合调用能力,因此可以在项目架构层面定义一堆基础的、简单的filter,按需在组件内组合适用。

computed 属性具有缓存能力,在组件内普适性更强,因此适用于复杂的数据转换、统计等场景。

总结

以上所述是小编给大家介绍的Vue 中 filter 与 computed 的区别与用法解析,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
Ext面向对象开发实践(续)
Nov 18 Javascript
Javascript学习笔记一 之 数据类型
Dec 15 Javascript
关于javascript event flow 的一个bug详解
Sep 17 Javascript
浏览器窗口加载和大小改变事件示例
Feb 27 Javascript
Bootstrap每天必学之响应式导航、轮播图
Apr 25 Javascript
PHP7新特性简述
Jun 11 Javascript
脚手架vue-cli工程webpack的基本用法详解
Sep 29 Javascript
node错误处理与日志记录的实现
Dec 24 Javascript
用node开发并发布一个cli工具的方法步骤
Jan 03 Javascript
js针对图片加载失败的处理方法分析
Aug 24 Javascript
JS面向对象编程实现的拖拽功能案例详解
Mar 03 Javascript
JavaScript判断数据类型有几种方法及区别介绍
Sep 02 Javascript
js实现课堂随机点名系统
Nov 21 #Javascript
JavaScript实现简单随机点名器
Nov 21 #Javascript
稍微学一下Vue的数据响应式(Vue2及Vue3区别)
Nov 21 #Javascript
Vue实现按钮级权限方案
Nov 21 #Javascript
微信小程序实现星级评价
Nov 20 #Javascript
微信小程序音乐播放器开发
Nov 20 #Javascript
微信小程序实现音乐播放器
Nov 20 #Javascript
You might like
phpBB BBcode处理的漏洞
2006/10/09 PHP
PHP Token(令牌)设计
2008/03/15 PHP
解析左右值无限分类的实现算法
2013/06/20 PHP
php画图实例
2014/11/05 PHP
PHP实现递归复制整个文件夹的类实例
2015/08/03 PHP
在WordPress中实现发送http请求的相关函数解析
2015/12/29 PHP
gearman中任务的优先级和返回状态实例分析
2020/02/27 PHP
node.js适合游戏后台开发吗?
2014/09/03 Javascript
javascript实现网页字符定位的方法
2015/07/14 Javascript
jQuery实现的类似淘宝网站搜索框样式代码分享
2015/08/24 Javascript
javascript实现3D切换焦点图
2015/10/16 Javascript
js实现的二分查找算法实例
2016/01/21 Javascript
解析浏览器端的AJAX缓存机制
2016/06/21 Javascript
Angular2学习笔记——详解路由器模型(Router)
2016/12/02 Javascript
js实现的简练高效拖拽功能示例
2016/12/21 Javascript
js实现无缝滚动图(可控制当前滚动的方向)
2017/02/22 Javascript
基于JQuery的购物车添加删除以及结算功能示例
2017/03/08 Javascript
[01:31:02]TNC vs VG 2019国际邀请赛淘汰赛 胜者组赛BO3 第一场
2019/08/22 DOTA
Python中关于使用模块的基础知识
2015/05/24 Python
Python判断文本中消息重复次数的方法
2016/04/27 Python
在Pycharm中项目解释器与环境变量的设置方法
2018/10/29 Python
在python中利用最小二乘拟合二次抛物线函数的方法
2018/12/29 Python
详解Python静态网页爬取获取高清壁纸
2019/04/23 Python
python使用tomorrow实现多线程的例子
2019/07/20 Python
pymysql 开启调试模式的实现
2019/09/24 Python
python实现的批量分析xml标签中各个类别个数功能示例
2019/12/30 Python
python实现提取COCO,VOC数据集中特定的类
2020/03/10 Python
Python urllib3软件包的使用说明
2020/11/18 Python
CSS3打造百度贴吧的3D翻牌效果示例
2017/01/04 HTML / CSS
世界知名接发和假发品牌:Poze Hair
2017/03/08 全球购物
家得宝官网:The Home Depot(全球最大的家居装饰专业零售商)
2018/12/17 全球购物
weblogic面试题
2016/03/07 面试题
计算机应届毕业生自荐信范文
2014/02/23 职场文书
推荐信格式范文
2014/05/09 职场文书
个人师德师风自我剖析材料
2014/09/29 职场文书
基于PyQt5制作一个群发邮件工具
2022/04/08 Python