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 相关文章推荐
详解Angular2表单-模板驱动的表单(Template-Driven Forms)
Aug 04 Javascript
React-Native之定时器Timer的实现代码
Oct 04 Javascript
浅谈node的事件机制
Oct 09 Javascript
js 原生判断内容区域是否滚动到底部的实例代码
Nov 15 Javascript
vue中实现移动端的scroll滚动方法
Mar 03 Javascript
红黑树的插入详解及Javascript实现方法示例
Mar 26 Javascript
jQuery 点击获取验证码按钮及倒计时功能
Sep 20 jQuery
谈谈React中的Render Props模式
Dec 06 Javascript
JS实现倒序输出的几种常用方法示例
Apr 13 Javascript
javascript递归函数定义和用法示例分析
Jul 22 Javascript
vue 使用原生组件上传图片的实例
Sep 08 Javascript
7个你应该知道的JS原生错误类型
Apr 29 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/01/07 PHP
WordPress中缩略图的使用以及相关技巧
2015/11/24 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
2017/11/13 PHP
Javascript 原型和继承(Prototypes and Inheritance)
2009/04/01 Javascript
JQuery each()函数如何优化循环DOM结构的性能
2012/12/10 Javascript
js如何实现点击标签文字,文字在文本框出现
2015/08/05 Javascript
分享有关jQuery中animate、slide、fade等动画的连续触发、滞后反复执行的bug
2016/01/10 Javascript
JS中split()用法(将字符串按指定符号分割成数组)
2016/10/24 Javascript
jQuery实现复制到粘贴板功能
2017/02/11 Javascript
JS异步加载的三种实现方式
2017/03/16 Javascript
JavaScript实现提交模式窗口后刷新父窗口数据的方法
2017/06/16 Javascript
vue中使用iview自定义验证关键词输入框问题及解决方法
2018/03/26 Javascript
微信小程序实现传递多个参数与事件处理
2019/08/12 Javascript
JavaScript禁止右击保存图片,禁止拖拽图片的实现代码
2020/04/28 Javascript
Object.keys() 和 Object.getOwnPropertyNames() 的区别详解
2020/05/21 Javascript
vue实现下载文件流完整前后端代码
2020/11/17 Vue.js
python实现sublime3的less编译插件示例
2014/04/27 Python
python使用BeautifulSoup分页网页中超链接的方法
2015/04/04 Python
利用Python爬虫给孩子起个好名字
2017/02/14 Python
利用Python中的pandas库对cdn日志进行分析详解
2017/03/07 Python
Python实现小数转化为百分数的格式化输出方法示例
2017/09/20 Python
对numpy中的数组条件筛选功能详解
2018/07/02 Python
从请求到响应过程中django都做了哪些处理
2018/08/01 Python
python 一篇文章搞懂装饰器所有用法(建议收藏)
2019/08/23 Python
快速解决docker-py api版本不兼容的问题
2019/08/30 Python
Python中base64与xml取值结合问题
2019/12/22 Python
对tensorflow中tf.nn.conv1d和layers.conv1d的区别详解
2020/02/11 Python
vscode配置anaconda3的方法步骤
2020/08/08 Python
python gui开发——制作抖音无水印视频下载工具(附源码)
2021/02/07 Python
Sunglasses Shop丹麦:欧洲第一的太阳镜在线销售网站
2017/10/22 全球购物
采用怎样的方法保证数据的完整性
2013/12/02 面试题
受欢迎的大学生自我评价
2013/12/05 职场文书
租赁意向书范本
2014/04/01 职场文书
服务标兵事迹材料
2014/05/04 职场文书
红领巾广播站广播稿(3篇)
2014/09/20 职场文书
干货干货!2019最新优秀创业计划书
2019/03/21 职场文书