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 相关文章推荐
Dojo 学习要点
Sep 03 Javascript
js控制的遮罩层实例介绍
May 29 Javascript
jquery果冻抖动效果实现方法
Jan 15 Javascript
Bootstrap基础学习
Jun 16 Javascript
javascript控制层显示或隐藏的方法
Jul 22 Javascript
谈一谈jQuery核心架构设计
Mar 28 Javascript
Function.prototype.apply()与Function.prototype.call()小结
Apr 27 Javascript
JavaScript中的this引用(推荐)
Aug 05 Javascript
js 判断一个数字是不是2的n次方幂的实例
Nov 26 Javascript
javascript设计模式 ? 解释器模式原理与用法实例分析
Apr 17 Javascript
Javascript异步流程控制之串行执行详解
Sep 27 Javascript
echarts柱状图背景重叠组合而非并列的实现代码
Dec 10 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
人族 Terran 基本策略
2020/03/14 星际争霸
Syphon 虹吸式咖啡壶冲煮–拨动法
2021/03/03 冲泡冲煮
PHP 和 MySQL 开发的 8 个技巧
2007/01/02 PHP
Php中文件下载功能实现超详细流程分析
2012/06/13 PHP
PHP使用正则表达式清除超链接文本
2013/11/12 PHP
PHP内核学习教程之php opcode内核实现
2016/01/27 PHP
document.createElement()用法
2013/03/13 Javascript
jQuery中bind,live,delegate与one方法的用法及区别解析
2013/12/30 Javascript
js动态往表格的td中添加图片并注册事件
2014/06/12 Javascript
jQuery获取file控件中图片的宽高与大小
2016/08/04 Javascript
纯前端JavaScript实现Excel IO案例分享
2016/08/26 Javascript
JS实现控制图片显示大小的方法【图片等比例缩放功能】
2017/02/18 Javascript
JS实现线性表的顺序表示方法示例【经典数据结构】
2017/04/11 Javascript
详解nodejs微信公众号开发——4.自动回复各种消息
2017/04/11 NodeJs
jQuery实现百度图片移入移出内容提示框上下左右移动的效果
2018/06/05 jQuery
nodejs用gulp管理前端文件方法
2018/06/24 NodeJs
详解JavaScript函数callee、call、apply的区别
2019/03/08 Javascript
jQuery pager.js 插件动态分页功能实例分析
2019/08/02 jQuery
基于JS实现快速读取TXT文件
2020/08/25 Javascript
Python基础中所出现的异常报错总结
2016/11/19 Python
python实现一个简单的并查集的示例代码
2018/03/19 Python
Python Excel处理库openpyxl使用详解
2019/05/09 Python
python实现一行输入多个值和一行输出多个值的例子
2019/07/16 Python
在Python3 numpy中mean和average的区别详解
2019/08/24 Python
python程序 线程队列queue使用方法解析
2019/09/23 Python
Python序列对象与String类型内置方法详解
2019/10/22 Python
Django修改app名称和数据表迁移方案实现
2020/09/17 Python
基于Django集成CAS实现流程详解
2020/11/28 Python
matplotlib交互式数据光标实现(mplcursors)
2021/01/13 Python
html5中canvas图表实现柱状图的示例
2017/11/13 HTML / CSS
迪士尼英国官方商店:shopDisney UK
2019/09/21 全球购物
包装类的功能、种类、常用方法
2012/01/27 面试题
残疾人创业典型事迹
2014/02/01 职场文书
迟到检讨书
2015/01/26 职场文书
学校中层领导培训心得体会
2016/01/11 职场文书
python实现MD5进行文件去重的示例代码
2021/07/09 Python