每日一点面试题

本文详细讲解了Vue.js中的$nextTick机制,解释了为何需要它来优化更新。讨论了v-if和v-for指令的使用限制和最佳实践,以及组件如何在状态切换中保存当前状态。同时,文章探讨了同源策略、跨域问题及其解决方案,并分析了深拷贝和浅拷贝的区别。最后,涉及了小程序的定位、地图使用以及axios的封装和超时处理问题。
摘要由CSDN通过智能技术生成

$nextTick

NextTick是什么

在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM

我们可以理解成,Vue 在更新 DOM 时是异步执行的。当数据发生变化,Vue将开启一个异步更新队列,视图需要等队列中所有数据变化完成之后,再统一进行更新

为什么要有nexttick

举个例子

{
   {
   num}}
for(let i=0; i<100000; i++){
   
    num = i
}

如果没有 nextTick 更新机制,那么 num 每次更新值都会触发视图更新(上面这段代码也就是会更新10万次视图),有了nextTick机制,只需要更新一次,所以nextTick本质是一种优化策略

v-if和v-for为什么不建议一起使用?

v-if 指令用于条件性地渲染一块内容。这块内容只会在指令的表达式返回 true值的时候被渲染

v-for 指令基于一个数组来渲染一个列表。v-for 指令需要使用 item in items 形式的特殊语法,其中 items 是源数据数组或者对象,而 item 则是被迭代的数组元素的别名

v-for 的时候,建议设置key值,并且保证每个key值是独一无二的,这便于diff算法进行优化

优先级

v-for的优先级是高于v-if的,如果作用在同一元素上,输出的渲染函数中可以看除会先执行循环再判断条件,哪怕只渲染列表中一小部分元素,也得在每次重渲染的时候遍历整个列表,这会造成性能的浪费

而在Vue3中,v-if的优先级时高于v-for的,因此v-if执行时要调用的变量可能还不存在,会导致报错。

使用场景

永远不要把 v-ifv-for 同时用在同一个元素上,带来性能方面的浪费(每次渲染都会先循环再进行条件判断)

为了避免渲染本应该被隐藏的列表,则在外层嵌套template(页面渲染不生成dom节点),在这一层进行v-if判断,然后在内部进行v-for循环

<template v-if="isShow">
    <p v-for="item in items">
</template>

为了过滤列表中的项目,如果条件出现在循环内部,可通过计算属性computed提前过滤掉那些不需要显示的项

computed
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值