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 相关文章推荐
JavaScipt基本教程之JavaScript语言的基础
Jan 16 Javascript
JavaScript 关键字屏蔽实现函数
Aug 02 Javascript
使用jquery实现简单的ajax
Jul 08 Javascript
JQuery.get提交页面不跳转的解决方法
Jan 13 Javascript
jQuery实现个性翻牌效果导航菜单的方法
Mar 09 Javascript
纯js模拟div层弹性运动的方法
Jul 27 Javascript
实例解析jQuery插件EasyUI最常用的表单验证规则
Nov 29 Javascript
JavaScript+CSS实现的可折叠二级菜单实例
Feb 29 Javascript
javascript事件委托的用法及其好处简析
Apr 04 Javascript
详解angular2采用自定义指令(Directive)方式加载jquery插件
Feb 09 Javascript
bootstrap table动态加载数据示例代码
Mar 25 Javascript
vue开发移动端底部导航条功能
Apr 08 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
基于文本的搜索
2006/10/09 PHP
ThinkPHP写第一个模块应用
2012/02/20 PHP
Yii2中DropDownList简单用法示例
2016/07/18 PHP
JavaScript 脚本将当地时间转换成其它时区
2009/03/19 Javascript
精通Javascript系列之数据类型 字符串
2011/06/08 Javascript
JS批量修改PS中图层名称的方法
2014/01/26 Javascript
JavaScript数组深拷贝和浅拷贝的两种方法
2014/04/16 Javascript
ajaxFileUpload.js插件支持多文件上传的方法
2014/09/02 Javascript
动态加载jQuery的两种方法实例分析
2015/07/17 Javascript
JS作为值的函数用法示例
2016/06/20 Javascript
JS获取中文拼音首字母并通过拼音首字母快速查找页面内对应中文内容的方法【附demo源码】
2016/08/19 Javascript
JavaScript中浅讲ajax图文详解
2016/11/11 Javascript
Jquery中attr与prop的区别详解
2017/05/27 jQuery
使用vue的v-for生成table并给table加上序号的实例代码
2017/10/27 Javascript
纯JS实现出生日期[年月日]下拉菜单效果
2018/06/01 Javascript
如何基于JS截获动态代码
2019/12/25 Javascript
Vue 微信端扫描二维码苹果端却只能保存图片问题(解决方法)
2020/01/19 Javascript
Python列表计数及插入实例
2014/12/17 Python
python微信公众号之关注公众号自动回复
2018/10/25 Python
django 做 migrate 时 表已存在的处理方法
2019/08/31 Python
pygame实现俄罗斯方块游戏(基础篇3)
2019/10/29 Python
python-OpenCV 实现将数组转换成灰度图和彩图
2020/01/09 Python
python GUI库图形界面开发之PyQt5单选按钮控件QRadioButton详细使用方法与实例
2020/02/28 Python
Python小整数对象池和字符串intern实例解析
2020/03/21 Python
Python字符串及文本模式方法详解
2020/09/10 Python
Html5 web本地存储实例详解
2016/07/28 HTML / CSS
意大利比基尼品牌:MISS BIKINI
2019/11/02 全球购物
Simons官方网站:加拿大时尚零售商
2020/02/20 全球购物
JDK安装目录下有哪些内容
2014/08/25 面试题
会计学财务管理专业个人的自我评价
2013/10/19 职场文书
文秘应聘自荐书范文
2014/02/18 职场文书
个人函授自我鉴定
2014/03/25 职场文书
好员工观后感
2015/06/17 职场文书
2015年教务主任工作总结
2015/07/22 职场文书
公司年会主持词范文!
2019/05/07 职场文书
Python数据分析入门之教你怎么搭建环境
2021/05/13 Python