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 相关文章推荐
jquery下利用jsonp跨域访问实现方法
Jul 29 Javascript
基于JQuery实现异步刷新的代码(转载)
Mar 29 Javascript
js replace替换所有匹配的字符串
Feb 13 Javascript
实用框架(iframe)操作代码
Oct 23 Javascript
JavaScript 作用域链解析
Nov 13 Javascript
js获取域名的方法
Jan 27 Javascript
JavaScript面试题大全(推荐)
Sep 22 Javascript
利用yarn实现一个webpack+react种子
Oct 25 Javascript
原生node.js案例--前后台交互
Feb 20 Javascript
Vue 表单控件绑定的实现示例
Aug 11 Javascript
关于vue编译版本引入的问题的解决
Sep 17 Javascript
搭建Vue从Vue-cli到router路由护卫的实现
Nov 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
通过文字传递创建的图形按钮
2006/10/09 PHP
php 中include()与require()的对比
2006/10/09 PHP
微信营销平台系统?刮刮乐的开发
2014/06/10 PHP
ThinkPHP框架实现FTP图片上传功能示例
2019/04/08 PHP
基于jquery实现的移入页面上空文本框时,让它变为焦点,移出清除焦点
2011/07/26 Javascript
jQuery Tools tooltip使用说明
2012/07/14 Javascript
jquery中交替点击事件的实现代码
2014/02/14 Javascript
NodeJS和BootStrap分页效果的实现代码
2016/11/07 NodeJs
jQuery手风琴的简单制作
2017/05/12 jQuery
Node.js环境下Koa2添加travis ci持续集成工具的方法
2017/06/19 Javascript
angularjs实现猜数字大小功能
2020/05/20 Javascript
Vue+SpringBoot开发V部落博客管理平台
2017/12/27 Javascript
vue.js 输入框输入值自动过滤特殊字符替换中问标点操作
2020/08/31 Javascript
[02:44]2014DOTA2 国际邀请赛中国区预选赛 大神红毯秀
2014/05/25 DOTA
Python的Tornado框架的异步任务与AsyncHTTPClient
2016/06/27 Python
Python 40行代码实现人脸识别功能
2017/04/02 Python
python 函数传参之传值还是传引用的分析
2017/09/07 Python
使用requests库制作Python爬虫
2018/03/25 Python
解决安装pycharm后不能执行python脚本的问题
2019/01/19 Python
Python爬虫 批量爬取下载抖音视频代码实例
2019/08/16 Python
python 操作hive pyhs2方式
2019/12/21 Python
浅谈Python中os模块及shutil模块的常规操作
2020/04/03 Python
解决reload(sys)后print失效的问题
2020/04/25 Python
python3 循环读取excel文件并写入json操作
2020/07/14 Python
PyCharm+PyQt5+QtDesigner配置详解
2020/08/12 Python
全网最细 Python 格式化输出用法讲解(推荐)
2021/01/18 Python
解决canvas转base64/jpeg时透明区域变成黑色背景的方法
2016/10/23 HTML / CSS
FORZIERI澳大利亚站:全球顶级奢华配饰精品店
2016/12/31 全球购物
加拿大最大的五金、家居装修和园艺产品商店:RONA
2017/01/27 全球购物
八皇后问题,输出了所有情况,不过有些结果只是旋转了90度
2016/08/15 面试题
Java如何获得ResultSet的总行数
2016/09/03 面试题
国贸专业个人求职信分享
2013/12/04 职场文书
中学生运动会口号
2014/06/07 职场文书
大学生助学金感谢信
2015/01/21 职场文书
Golang 编译成DLL文件的操作
2021/05/06 Golang
python实现过滤敏感词
2021/05/08 Python