前端常见面试题目|2nextTick,vue自定义指令,单页面应用,keep-alivedata为什么是一个函数而不是对象,mixin,子组件可以直接改变父组件的数据吗

本文深入探讨了Vue中的一些关键概念,包括为何data是一个函数而非对象,keep-alive组件的工作原理和缓存策略,$nextTick的原理及在DOM更新中的作用,以及自定义指令的创建和应用场景。还讨论了Vue单页应用与多页应用的区别,并解释了子组件如何通过$emit间接改变父组件数据以遵循单向数据流原则。
摘要由CSDN通过智能技术生成

16. data为什么是一个函数而不是对象

Vue组件可能存在多个实例,如果使用对象形式定义data,则会导致它们共用一个data对象,那么状态变更将会影响所有组件实例,这是不合理的;采用函数形式定义,在initData时会将其作为工厂函数返回全新data对象,有效规避多实例之间状态污染问题。而在Vue根实例创建过程中则不存在该限制,也是因为根实例只能有一个,不需要担心这种情况。

17. 对keep-alive的理解,它是如何实现的,具体缓存的是什么?

如果需要在组件切换的时候,保存一些组件的状态防止多次渲染,就可以使用 keep-alive 组件包裹需要保存的组件。
(1)keep-alive
keep-alive有以下三个属性:
●include 字符串或正则表达式,只有名称匹配的组件会被匹配;
●exclude 字符串或正则表达式,任何名称匹配的组件都不会被缓存;
●max 数字,最多可以缓存多少组件实例。
注意:keep-alive 包裹动态组件时,会缓存不活动的组件实例。
主要流程
1判断组件 name ,不在 include 或者在 exclude 中,直接返回 vnode,说明该组件不被缓存。
2获取组件实例 key ,如果有获取实例的 key,否则重新生成。
3key生成规则,cid +“∶∶”+ tag ,仅靠cid是不够的,因为相同的构造函数可以注册为不同的本地组件。
4如果缓存对象内存在,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学习记录wanxiaowan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值