面试题四:请解释一下watch,computed和filter之间的区别

2023-09-15 14:05:34

watch与computed、filter:

watch:监控已有属性,一旦属性发生了改变就去自动调用对应的方法

computed:监控已有的属性,一旦属性的依赖发生了改变,就去自动调用对应的方法.computed有详细的介绍,移步computed的使用

filter:js中为我们提供的一个方法,用来帮助我们对数据进行筛选,是methods的一种,如果简单的修饰数据的话用过滤器,如果需要处理大量的复杂逻辑还是用methods比较好。filter也有详细的介绍,移步请你谈一谈Vue中的filter功能的实现

watch与computed的区别:

1.watch监控现有的属性,computed通过现有的属性计算出一个新的属性。

2.watch不会缓存数据,每次打开页面都会重新加载一次。

但是computed如果之前进行过计算他会将计算的结果缓存,如果再次请求会从缓存中
得到数据(所以computed的性能比watch更好一些)

filter 与 computed 的区别

1. 触发时机不同

computed 属性背后的处理逻辑比较复杂,依赖 Vue 的数据更新通知机制,在属性所依赖的其他数据项发生变化时才会重新触发计算。优点是计算频率相对较低;缺点是依赖于组件,难以抽取成独立逻辑,也就是复用性低。

filter 则显的简单很多,只在显式调用时触发,一般应用在模板渲染上。优点是容易在组件外抽象;缺点是每次模板渲染时都需要重新执行计算。可以通过示例 感受调用时机的区别:

2. 应用范围不同

computed 很广泛,可以应用在其他computed、methods、生命周期函数、模板;filter 一般只应用于模板渲染上,如果要在其他位置复用,需要使用 this._f 函数:

温馨提示:用this.$options也可以

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 属性具有缓存能力,在组件内普适性更强,因此适用于复杂的数据转换、统计等场景。

更多推荐

性能测试 —— Jmeter定时器

固定定时器如果你需要让每个线程在请求之前按相同的指定时间停顿,那么可以使用这个定时器;需要注意的是,固定定时器的延时不会计入单个sampler的响应时间,但会计入事务控制器的时间1、使用固定定时器位置在http请求中;每次http请求前延迟3秒;配置路径——定时器——固定定时器;如下图:2、线程组循环3次,通过表格查看

启山智软/电商商城100%开源

介绍想要了解代码规范,学习商城解决方案,点击下方官网链接联系客服作者:启山智软官网及博客:启山智软官网、CSDN、掘金、gitee简介:启山智软目前开发了全渠道电商商城系统,本商城是基于SpringCloud的商城系统,百万真实用户沉淀并检验的商城。注意:该项目只提供学习,切勿用于商业用途电商商城是什么:电商商城指的是

json数据解析

目录一、读数据1、简单对象读取2、数组读取3、对象读取二、写数据1、简单生成JSON2、对象数组JSON3、嵌套对象三、一个综合例子1、读JSON2、写JSON一、读数据1、简单对象读取{"app":"xnwVideo","src":"C:\\build-video\\Output","dest":"C:\\build

thinkphp:查询本周中每天中日期的数据,查询今年中每个月的数据,查询近五年每年的总数据

一、查询本周中每天中日期的数据结果:以今天2023-09-14为例,这一周为2023-09-11~2023-09-07代码后端thinkphp://查询本周每天的的总金额数//获取本周的起始日期和结束日期$weekStart=date('Y-m-d',strtotime('thisweekMonday'));$week

零基础Linux_5(开发工具_上)yum和vim和gcc/g++和gdb

目录1.软件包管理器yum1.1安装软件的方式1.2yum指令2.vim(编辑器)2.1vim的简单操作2.1.1方向键(HJKL)2.1.2退出vim2.2vim文本批量化操作(命令模式)2.2.1复制.粘贴.删除.剪贴.撤销2.2.2光标跳转2.2.3vim其它操作2.3配置vim3.gcc和g++3.1程序的翻译

leetcode363周赛

2859.计算K置位下标对应元素的和核心思想:枚举+调库,比较简单这题。2860.让所有学生保持开心的分组方法数核心思想:枚举选择学生的人数,首先选0个,选1个,选2个,选3个...;由于要满足题目要求得到一个结论我们需要优先选择nums[i]小的(具体证明可以看b站灵神视频),当时我有一个疑问比如选择三个学生,这三个

CRM软件系统对外贸行业的解决方案

国内的外贸行业经历了四个发展阶段,从发展期到繁荣期,CRM客户管理系统逐步走到幕前,成为外贸企业必不可少的主打工具。那么外贸行业正面临哪些问题?该如何解决?下面我们就来说说适合外贸行业的CRM解决方案。外贸行业的压力和困境外贸行业向来都是机遇与挑战并存。每年都有商业领袖行业大咖高呼外贸的春天要来了,可外贸人自己感受到的

Microsoft Dynamics 365 CE 扩展定制 - 1. 无代码扩展

简介商用现货产品(COTS)对企业组织来说是有吸引力的选择,因为它们包含了可配置的开箱即用功能,可以在不编写任何代码的情况下满足大部分业务需求。Dynamics365也不例外。DynamicsCRM365专门提供功能强大的模块化功能丰富的产品,可根据您的组织需求进行定制。一般来说,随着产品的发展,可配置的无代码扩展实现

XC5350A 单节锂电池保护芯片 过放2.9V/2.8V/2.4V保护IC

XC5350A产品是一个高集成度的鲤离子/聚合物电池保护解决方案。XC5350A包含先进的功率MOSFET,高精度电压检测电路和延迟电路XC5350A放入一个超小型SOT23-5封装,只有一个外部元件使其成为在电池组有限的空间的理想解决方案。XC5350A具有包括过充,过放,过流和负载短路保护等电池应用所需的所有保护功

docker常用命令汇总及解释

Docker是一个开源的应用容器引擎,它允许开发者将应用及其依赖打包到一个可移植的容器中,并发布到任何流行的Linux机器或Windows机器上。以下是一些常用的Docker命令及其解释:1.`dockerpull`:从DockerHub或其他仓库下载镜像。例如:`dockerpullubuntu:latest`,这将

方法区(Method Area)

方法区(MethodArea)与Java堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等数据。虽然《Java虚拟机规范》中把方法区描述为堆的一个逻辑部分,但是它却有一个别名叫作“非堆”(Non-Heap),目的是与Java堆区分开来。《Java虚拟机规范

热文推荐