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里使用Dom操作Xml
Sep 20 Javascript
javascript URL编码和解码使用说明
Apr 12 Javascript
jquery表格内容筛选实现思路及代码
Apr 16 Javascript
iframe调用父页面函数示例详解
Jul 17 Javascript
JavaScript实现列出数组中最长的连续数
Dec 29 Javascript
jQuery中DOM树操作之使用反向插入方法实例分析
Jan 23 Javascript
阻止表单提交按钮多次提交的完美解决方法
May 16 Javascript
JavaScript 闭包详细介绍
Sep 28 Javascript
jquery 禁止鼠标右键并监听右键事件
Apr 27 jQuery
微信小程序之获取当前位置经纬度以及地图显示详解
May 09 Javascript
JavaScript命名空间模式实例详解
Jun 20 Javascript
如何对react hooks进行单元测试的方法
Aug 14 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
德生H-501的评价与改造
2021/03/02 无线电
PHP中Date获取时间不正确怎么办
2008/06/05 PHP
php 获取远程网页内容的函数
2009/09/08 PHP
php之curl实现http与https请求的方法
2014/10/21 PHP
PHP制作3D扇形统计图以及对图片进行缩放操作实例
2014/10/23 PHP
修复ShopNC使用QQ 互联时提示100010 错误
2015/11/08 PHP
PHP实现使用DOM将XML数据存入数组的方法示例
2017/09/27 PHP
Ubuntu彻底删除PHP7.0的方法
2018/07/27 PHP
TP5(thinkPHP5框架)实现显示错误信息及行号功能的方法
2019/06/03 PHP
laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子
2019/11/14 PHP
List all the Databases on a SQL Server
2007/06/21 Javascript
JavaScript 轻松搞定快捷留言功能 只需一行代码
2010/04/01 Javascript
JavaScript禁止页面操作的示例代码
2013/12/17 Javascript
JS上传图片前实现图片预览效果的方法
2015/03/02 Javascript
JavaScript使表单中的内容显示在屏幕上的方法
2015/06/29 Javascript
RequireJS 依赖关系的实例(推荐)
2017/01/21 Javascript
vue中的event bus非父子组件通信解析
2017/10/27 Javascript
node 使用 async 控制并发的方法
2018/05/07 Javascript
vuex实现及简略解析(小结)
2019/03/01 Javascript
python实现监控windows服务并自动启动服务示例
2014/04/17 Python
Python随机生成彩票号码的方法
2015/03/05 Python
Python之父谈Python的未来形式
2016/07/01 Python
python编程实现希尔排序
2017/04/13 Python
解决Django模板无法使用perms变量问题的方法
2017/09/10 Python
Python简单实现两个任意字符串乘积的方法示例
2018/04/12 Python
Python爬虫框架Scrapy常用命令总结
2018/07/26 Python
Python实现代码统计工具
2019/09/19 Python
wxpython绘制音频效果
2019/11/18 Python
Keras 切换后端方式(Theano和TensorFlow)
2020/06/19 Python
让IE下支持Html5的placeholder属性的插件
2014/09/02 HTML / CSS
澳大利亚床上用品、浴巾和家居用品购物网站:Bambury
2020/04/16 全球购物
党员岗位承诺书
2014/03/25 职场文书
小学清明节活动总结
2014/07/04 职场文书
迟到检讨书范文
2015/01/27 职场文书
搞笑结婚保证书
2015/05/08 职场文书
MySQL数据库中varchar类型的数字比较大小的方法
2021/11/17 MySQL