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 相关文章推荐
CSS常用网站布局实例
Apr 03 Javascript
让JavaScript 轻松支持函数重载 (Part 1 - 设计)
Aug 04 Javascript
手把手教你自己写一个js表单验证框架的方法
Sep 14 Javascript
Jquery实现三层遍历删除功能代码
Apr 23 Javascript
用jquery实现的一个超级简单的下拉菜单
May 18 Javascript
jQuery学习笔记之创建DOM元素
Jan 19 Javascript
jquery实现公告翻滚效果
Feb 27 Javascript
JavaScript控制listbox列表框的项目上下移动的方法
Mar 18 Javascript
js实现简单的选项卡效果
Feb 23 Javascript
jquery仿京东侧边栏导航效果
Mar 02 Javascript
JS数组中对象去重操作示例
Jun 04 Javascript
vue实现虚拟列表功能的代码
Jul 28 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
MySQL修改密码方法总结
2008/03/25 PHP
解析PHP生成静态html文件的三种方法
2013/06/18 PHP
phpstorm配置Xdebug进行调试PHP教程
2014/12/01 PHP
PHP基于单例模式编写PDO类的方法
2016/09/13 PHP
yii2 commands模式以及配置crontab定时任务的方法
2017/08/19 PHP
CMSPRESS 10行代码搞定 PHP无限级分类2
2018/03/30 PHP
php实现每日签到功能
2018/11/29 PHP
js利用div背景,做一个竖线的效果。
2008/11/22 Javascript
javascript iframe编程相关代码
2009/12/28 Javascript
javascript之学会吝啬 精简代码
2010/04/25 Javascript
aspx中利用js实现确认删除代码
2010/07/22 Javascript
javascript预览上传图片发现的问题的解决方法
2010/11/25 Javascript
jquery 插件学习(三)
2012/08/06 Javascript
JavaScript实现判断图片是否加载完成的3种方法整理
2015/03/13 Javascript
基于AngularJs + Bootstrap + AngularStrap相结合实现省市区联动代码
2016/05/30 Javascript
基于MVC5和Bootstrap的jQuery TreeView树形控件(一)之数据支持json字符串、list集合
2016/08/11 Javascript
AngularJS 作用域详解及示例代码
2016/08/17 Javascript
JavaScript面向对象分层思维全面解析
2016/11/22 Javascript
iview tabs 顶部导航栏和模块切换栏的示例代码
2019/03/04 Javascript
vue动态路由:路由参数改变,视图不更新问题的解决
2019/11/05 Javascript
Vue中通过vue-router实现命名视图的问题
2020/04/23 Javascript
JavaScript WeakMap使用详解
2021/02/05 Javascript
[01:04]不如跳舞!DOTA2新英雄玛尔斯的欢乐日常
2019/03/11 DOTA
matplotlib绘制符合论文要求的图片实例(必看篇)
2017/06/02 Python
Python定义二叉树及4种遍历方法实例详解
2018/07/05 Python
Python importlib动态导入模块实现代码
2020/04/16 Python
一款纯css3实现简单的checkbox复选框和radio单选框
2014/11/05 HTML / CSS
奥地利领先的在线药房:SHOP APOTHEKE
2019/10/07 全球购物
linux比较文件内容的命令是什么
2015/09/23 面试题
个性与发展自我评价
2014/02/11 职场文书
违反工作纪律检讨书
2014/02/15 职场文书
《蝙蝠和雷达》教学反思
2014/04/23 职场文书
担保书格式范文
2015/09/22 职场文书
总结Pyinstaller打包的高级用法
2021/06/28 Python
利用Python多线程实现图片下载器
2022/03/25 Python
zabbix如何添加监控主机和自定义监控项
2022/08/14 Servers