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 相关文章推荐
超级兔子让浮动层消失的前因后果
Mar 09 Javascript
关于javascript中this关键字(翻译+自我理解)
Oct 20 Javascript
jQuery为iframe的body添加click事件的实现代码
Apr 07 Javascript
使用js完成节点的增删改复制等的操作
Jan 02 Javascript
jQuery对下拉框,单选框,多选框的操作
Feb 21 Javascript
Easyui form combobox省市区三级联动
Jan 13 Javascript
Bootstrap入门书籍之(三)栅格系统
Feb 17 Javascript
深入浅析JS的数组遍历方法(推荐)
Jun 15 Javascript
基于Layer+jQuery的自定义弹框
May 26 Javascript
原生JS封装_new函数实现new关键字的功能
Aug 12 Javascript
React 路由懒加载的几种实现方案
Oct 23 Javascript
微信小程序实现canvas分享朋友圈海报
Jun 21 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 二维数组时间排序实现代码
2016/11/19 PHP
PHP 表单提交及处理表单数据详解及实例
2016/12/27 PHP
页面中body onload 和 window.onload 冲突的问题的解决
2009/07/01 Javascript
33种Javascript 表格排序控件收集
2009/12/03 Javascript
input的focus方法使用
2010/03/13 Javascript
js constructor的实际作用分析
2011/11/15 Javascript
jquery实现简单的拖拽效果实例兼容所有主流浏览器
2013/06/21 Javascript
javascript窗口宽高,鼠标位置,滚动高度(详细解析)
2013/11/18 Javascript
jquery数组之存放checkbox全选值示例代码
2013/12/20 Javascript
node.js中的fs.appendFileSync方法使用说明
2014/12/17 Javascript
使用iojs的jsdom库实现同步系统时间
2015/04/20 Javascript
javascript实现checkbox全选的代码
2015/04/30 Javascript
Bootstrap每天必学之导航
2015/11/26 Javascript
基于RequireJS和JQuery的模块化编程日常问题解析
2016/04/14 Javascript
基于JavaScript FileReader上传图片显示本地链接
2016/05/27 Javascript
使用jquery如何获取时间
2016/10/13 Javascript
jQuery实现的购物车物品数量加减功能代码
2016/11/16 Javascript
基于webpack.config.js 参数详解
2018/03/20 Javascript
微信小程序实现漂亮的弹窗效果
2020/05/26 Javascript
Vue+axios+WebApi+NPOI导出Excel文件实例方法
2019/06/05 Javascript
Vue实例的对象参数options的几个常用选项详解
2019/11/08 Javascript
Vue 3.0中jsx语法的使用
2020/11/13 Javascript
element-ui 弹窗组件封装的步骤
2021/01/22 Javascript
[03:52]显微镜下的DOTA2第三期——英雄在无聊的时候干什么
2014/06/20 DOTA
wxPython学习之主框架实例
2014/09/28 Python
简单解决Python文件中文编码问题
2015/11/22 Python
用Python写一个无界面的2048小游戏
2016/05/24 Python
Python中如何获取类属性的列表
2016/12/26 Python
Python实用技巧之利用元组代替字典并为元组元素命名
2018/07/11 Python
django form和field具体方法和属性说明
2020/07/09 Python
python try...finally...的实现方法
2020/11/25 Python
HTML中使用SVG与SVG预定义形状元素介绍
2013/06/28 HTML / CSS
HTML5通过navigator.mediaDevices.getUserMedia调用手机摄像头问题
2020/04/27 HTML / CSS
Shell脚本如何向终端输出信息
2014/04/25 面试题
大学生党员个人对照检查材料范文
2014/09/25 职场文书