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 相关文章推荐
用javascript实现读取txt文档的脚本
Jul 20 Javascript
javascript基于jQuery的表格悬停变色/恢复,表格点击变色/恢复,点击行选Checkbox
Aug 05 Javascript
javascript中判断一个值是否在数组中并没有直接使用
Dec 17 Javascript
js实现飞入星星特效代码
Oct 17 Javascript
JavaScript给input的value赋值引发的关于基本类型值和引用类型值问题
Dec 07 Javascript
Bootstrap CSS组件之按钮下拉菜单
Dec 17 Javascript
Vue.js实战之利用vue-router实现跳转页面
Apr 01 Javascript
简单实现js点击展开二级菜单功能
May 16 Javascript
VUE页面中加载外部HTML的示例代码
Sep 20 Javascript
vue-cli开发环境实现跨域请求的方法
Apr 07 Javascript
小程序开发中如何使用async-await并封装公共异步请求的方法
Jan 20 Javascript
vue实现循环滚动列表
Jun 30 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
PHP 采集程序 常用函数
2008/12/18 PHP
php程序之die调试法 快速解决错误
2009/09/17 PHP
如何用php获取文件名后缀
2013/06/09 PHP
解析php中session的实现原理以及大网站应用应注意的问题
2013/06/17 PHP
php实现改变图片直接打开为下载的方法
2015/04/14 PHP
typecho插件编写教程(二):写一个新插件
2015/05/28 PHP
关于扩展 Laravel 默认 Session 中间件导致的 Session 写入失效问题分析
2016/01/08 PHP
LINUX下PHP程序实现WORD文件转化为PDF文件的方法
2016/05/13 PHP
用JavaScript将从数据库中读取出来的日期型格式化为想要的类型。
2009/08/15 Javascript
JS对HTML标签select的获取、添加、删除操作
2013/10/17 Javascript
JS格式化数字金额用逗号隔开保留两位小数
2013/10/18 Javascript
解决jQuery动态获取手机屏幕高和宽的问题
2014/05/07 Javascript
JQuery获取与设置HTML元素的内容或文本的实现代码
2014/06/20 Javascript
js获取数组的最后一个元素
2015/04/14 Javascript
jquery trigger函数执行两次的解决方法
2016/02/29 Javascript
JS实现支持Ajax验证的表单插件
2016/03/24 Javascript
AngularJs Scope详解及示例代码
2016/09/01 Javascript
Vue动态实现评分效果
2017/05/24 Javascript
微信小程序实现轮播图效果
2017/09/07 Javascript
详解vue axios中文文档
2017/09/12 Javascript
JS实现的简单tab切换功能完整示例
2019/06/20 Javascript
[01:31](回顾)杀出重围,决战TI之巅
2014/07/01 DOTA
PyQt4实现下拉菜单可供选择并打印出来
2018/04/20 Python
Linux(Redhat)安装python3.6虚拟环境(推荐)
2018/05/05 Python
如何基于pythonnet调用halcon脚本
2020/01/20 Python
加拿大建筑和装修专家:Reno-Depot
2017/12/21 全球购物
main 函数执行以前,还会执行什么代码
2013/04/17 面试题
产品销售计划书
2014/05/04 职场文书
金融与证券专业求职信
2014/06/22 职场文书
党委班子剖析材料
2014/08/21 职场文书
人力资源部岗位职责
2015/02/11 职场文书
2015年党建工作汇报材料
2015/06/25 职场文书
幼儿园庆六一主持词
2015/06/30 职场文书
《成长的天空》读后感3篇
2019/12/06 职场文书
OpenCV-Python直方图均衡化实现图像去雾
2021/06/07 Python
一次线上mongo慢查询问题排查处理记录
2022/03/18 MongoDB