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面向对象之访问对象属性的两种方式分析
Jan 13 Javascript
javascript类型系统 Window对象学习笔记
Jan 07 Javascript
Bootstrap开发实战之响应式轮播图
Jun 02 Javascript
JavaScript中绑定事件的三种方式及去除绑定
Nov 05 Javascript
js判断手机号是否正确并返回的实现代码
Jan 17 Javascript
Vue制作Todo List网页
Apr 26 Javascript
vue-ajax小封装实例
Sep 18 Javascript
使用cookie绕过验证码登录的实现代码
Oct 12 Javascript
jQuery实现的页面详情展开收起功能示例
Jun 11 jQuery
Vue.js页面中有多个input搜索框如何实现防抖操作
Nov 04 Javascript
jQuery实现移动端笔触canvas电子签名
May 21 jQuery
JavaScript parseInt0.0000005打印5原理解析
Jul 23 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 stream_get_meta_data返回值
2013/09/29 PHP
php可应用于面包屑导航的迭代寻找家谱树实现方法
2015/02/02 PHP
Smarty模板引擎缓存机制详解
2016/05/23 PHP
基于thinkPHP框架实现留言板的方法
2016/10/17 PHP
JavaScript去除空格的几种方法
2006/10/03 Javascript
日期处理的js库(迷你版)--自建js库总结
2011/11/21 Javascript
jquery zTree异步加载简单实例分享
2013/02/05 Javascript
左侧是表头的JS表格控件(自写,网上没有的)
2013/06/04 Javascript
网页右侧悬浮滚动在线qq客服代码示例
2014/04/28 Javascript
JavaScript获取页面中超链接数量的方法
2015/11/09 Javascript
angular-ngSanitize模块-$sanitize服务详解
2017/06/13 Javascript
修改 bootstrap table 默认detailRow样式的实例代码
2017/07/21 Javascript
Vue2仿淘宝实现省市区三级联动
2020/04/15 Javascript
Vue实现textarea固定输入行数与添加下划线样式的思路详解
2018/06/28 Javascript
angular ng-model 无法获取值的处理方法
2018/10/02 Javascript
Vue watch响应数据实现方法解析
2020/07/10 Javascript
JS数据类型分类及常用判断方法
2020/11/19 Javascript
python音频处理用到的操作的示例代码
2017/10/27 Python
python判断一个集合是否为另一个集合的子集方法
2018/05/04 Python
Flask框架信号用法实例分析
2018/07/24 Python
Python celery原理及运行流程解析
2020/06/13 Python
Python 实现将某一列设置为str类型
2020/07/14 Python
html5使用canvas实现图片下载功能的示例代码
2017/08/26 HTML / CSS
药学专业大学生自荐信
2013/09/28 职场文书
大学军训感言
2014/01/10 职场文书
幼儿园消防安全制度
2014/01/26 职场文书
自行车租赁公司创业计划书
2014/01/28 职场文书
大龄毕业生求职别忘职业规划
2014/03/11 职场文书
大学校务公开实施方案
2014/03/31 职场文书
医院义诊活动总结
2014/07/04 职场文书
车间统计员岗位职责
2015/04/14 职场文书
2015年房地产个人工作总结
2015/05/26 职场文书
CSS 新特性 contain控制页面的重绘与重排问题
2021/04/30 HTML / CSS
解决go在函数退出后子协程的退出问题
2021/04/30 Golang
浅谈sql_@SelectProvider及使用注意说明
2021/08/04 Java/Android
使用Nginx搭载rtmp直播服务器的方法
2021/10/16 Servers