vue3使用nextTick

news2024/11/27 3:50:38
  1. 发现nextTick必须放在修改一个响应式数据之后,才会在onUpdated之后被调用,如果nextTick是放在所有对响应式数据修改之前,则nextTick里面的回调函数会在onBeforeUpdate方法执行前就被调用了。可是nextTick必须等到onUpdated执行完成之后执行,才能拿到渲染得到的dom
  2. 下面发请求的时候是没有使用async的(Promise的语法糖),它里面的then函数对serverRef的修改,会再一次触发组件重新渲染,也就是onBeforeUpdate和onUpdated又被回调了一次,也就是说,下面的toggleColor这个方法,触发了2次渲染。
---onBeforeMounted---
RefImpl {__v_isShallow: false, dep: undefined, __v_isRef: true, _rawValue: null, _value: null}
---mounted---
RefImpl {__v_isShallow: false, dep: undefined, __v_isRef: true, _rawValue: span, _value: span}
halo world
---onBeforeUpdate---
---onUpdated---
RefImpl {__v_isShallow: false, dep: undefined, __v_isRef: true, _rawValue: button, _value: button}
nextTick1
res ojbk
---onBeforeUpdate---
---onUpdated---
nextTick2
<template>

    <div style="display: flex;">
        
        <ul class="ul-list">
            <li v-for="i in num" :id="'li'+i" >{{ i }}</li>
        </ul>


        <div class="div-desc">

            <input type="text" v-model="n">
            <button @click="handleClick">修改num</button>
            
            <br>
            <br>

            <button @click="toggleColor">切换span颜色</button>
            <span ref="spanRef" :style="{color:colorRef}">span</span>

            *{{ serverResp }}*

            <button v-if="isShow" ref="btnRef">dd</button>
        </div>

    </div>

</template>

<script lang="ts" setup>
    import { ref,reactive,onBeforeMount,onMounted,onBeforeUpdate,onUpdated,nextTick,getCurrentInstance } from 'vue'
    const { proxy } = getCurrentInstance()
    let num = ref(10)

    let n = ref(10)

    const btnRef = ref(null)

    let isShow = ref(false)

    let serverResp = ref('')

    const spanRef = ref(null)

    const handleClick = () => {
        num.value = parseInt(n.value)
    }

    const colorRef = ref('')
    const toggleColor = () => {
        debugger

        proxy.Request({
            url:'http://localhost:8083/test'
        }).then(res=>{
            debugger
            console.log('res',res);
            serverResp.value = res
            nextTick(()=>{ // 要放在对响应式数据修改之后
                debugger
                console.log('nextTick2');
            })
        })

        debugger

        isShow.value = true

        nextTick(()=>{  // 要放在对(至少一个)响应式数据修改之后,
                        // 否则这里函数调用将拿不到btnRef,必须要等到onUpdated回调之后,执行nextTick里面的回调才能拿到btnRef
            debugger
            console.log(btnRef); 
            console.log('nextTick1');
        })


        if(colorRef.value === 'red') {
            colorRef.value = 'blue'
        } else {
            colorRef.value = 'red'
        }

        

        num.value = num.value - 1

        debugger

        console.log('halo world');
    }

    onBeforeMount(() => {
        console.log('---onBeforeMounted---')
        console.log(spanRef);
    })

    onMounted(()=>{
        console.log('---mounted---')
        console.log(spanRef);
        spanRef.value.style.color = 'cyan'
    }) 

    onBeforeUpdate(()=>{
        debugger

        console.log('---onBeforeUpdate---')
    })
    
    onUpdated(()=>{
        debugger

        console.log('---onUpdated---')
    })
    
</script>

<style lang="scss">
    .ul-list {
        width: 100px;
    }
    .div-list { 
        width: 300px;
    }
</style>

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/402790.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android代码重构系列-02-使用Kotlin协程实现一个支持任务编排的轻量级启动器

前言虽然本文的主题是启动器&#xff0c;但是笔者不打算去写怎么做启动优化&#xff0c;以及怎么实现一个完美的启动器。关于开源的第三方Android启动器已经有很多优秀的轮子了&#xff0c;比如阿里巴巴的alpha&#xff0c;参考 alpha 并改进其部分细节的Anchors&#xff0c;St…

Mybatis框架源码笔记(七)之Mybatis中类型转换模块(TypeHandler)解析

1、JDBC的基本操作回顾 这里使用伪代码概括一下流程: 对应数据库版本的驱动包自行下载加载驱动类 (Class.forName("com.mysql.cj.jdbc.Driver"))创建Connection连接: conn DriverManager.getConnection("jdbc:mysql://数据库IP:port/数据库名称?useUnico…

最新消息:2023年软考高项教材改版!

最新通知&#xff1a;从2023年上半年软考开始信息系统项目管理师考试将依据新版考试大纲进行。 给备考高项的朋友的一些建议&#xff1a; 备考资源&#xff1a; 【腾讯文档】软考各科资料分享 https://docs.qq.com/doc/DTVN1SWtFZHdicUNp 复习方法&#xff1a; 选择题 选择题…

ChatGPT,乌合之众的疯狂

最近ChatGPT有多火爆就不用我说了。公司里&#xff0c;从CEO到技术人员&#xff0c;乃至于门口的保安、食堂的大婶&#xff0c;没有一个不会聊两句ChatGPT的。连我20年未见的小学同学、三线城市警官&#xff0c;都问我这东西能不能给领导写汇报材料。 用不了多久&#xff0c;家…

颠覆推特VS改造推特:什么是去中心化社交的正确姿势?

去年&#xff0c;“钢铁侠”伊隆马斯克收购了全球最大的社交媒体之一——推特。推特成立于2006年&#xff0c;是一个“公民广场”&#xff0c;允许大家公开发表观点和内容。用户可以关注自己喜欢的账号&#xff0c;也可以点赞转发评论他人的推文&#xff0c;中国的微博便是照搬…

【halcon】轮廓拟合相关算子

涉及函数 edges_sub_pix 寻找边缘 edges_sub_pix (Image, Edges, canny, 1, 10, 20) 后面三个参数&#xff0c;越小&#xff0c;找到的细节越多。这个是对应录波器为canny时。 canny滤波器用的最多。 segment_contours_xld 将连续的轮廓进行分段&#xff0c;按圆弧或者执…

JUC(七)

1.线程安全集合类 1>.线程安全集合类可以分为三大类: ①.遗留的(/旧的)线程安全集合,如:Hashtable,Vector; ②.使用Collections装饰的线程安全集合,如: Collections.synchronizedCollectionCollections.synchronizedListCollections.synchronizedMapCollections.synchroniz…

window通过wsl启动appsmith源码

window通过wsl启动appsmith前端后端前言appsmith前端本地启动WSL安装下载ubuntu升级wsl到wsl2ubuntu安装环境环境要求Ubuntu环境配置node下载解压运行[源码](https://www.appsmith.com/)本地访问后端appsmith后台本地启动启动mongo、rediswsl ubuntu中启动后台试试流程总结最后…

缓存双写一致性之更新策略探讨

问题由来 数据redis和MySQL都要有一份&#xff0c;如何保证两边的一致性。 如果redis中有数据&#xff1a;需要和数据库中的值相同如果redis中没有数据&#xff1a;数据库中的值是最新值&#xff0c;且准备会写redis 缓存操作分类 自读缓存读写缓存&#xff1a; &#xff0…

关于vuex的使用

1.首先安装vuex npm install vuex --save 这时如果直接安装vuex&#xff0c;不指定版本的话&#xff0c;就会直接安装最新的vuex的版本。所以会出现报错。 报错就安装这个 npm install --save vuex3 2.创建文件夹&#xff0c; 有的时候安装好会自动创建vuex的文件夹 &#xf…

Python解题 - CSDN周赛第35期 - 不算题解的题解

本期四道题还是全考过&#xff0c;题解在网上也都搜得到。。。只好继续水一份不算题解的题解。 第一题&#xff1a;交换后的or 给定两组长度为n的二进制串&#xff0c;请问有多少种方法在第一个串中交换两个不同位置上的数字&#xff0c;使得这两个二进制串“或”的结果发生改…

案例01-修改数据redis没有同步更新

目录 一&#xff1a;背景介绍 二&#xff1a;思路&方案 三&#xff1a;过程 1.修改数据没有删除缓存 2.修改数据删除了缓存 四&#xff1a;总结 五&#xff1a;升华 一&#xff1a;背景介绍 redis中存储了关于一个课程下多个班级的信息。但是难免会在一个课程下添加新…

pandas 数据预处理+数据概览 处理技巧整理(持续更新版)

这篇文章主要是整理下使用pandas的一些技巧&#xff0c;因为经常不用它&#xff0c;这些指令忘得真的很快。前段时间在数模美赛中已经栽过跟头了&#xff0c;不希望以后遇到相关问题的时候还去网上查&#xff08;主要是太杂了&#xff09;。可能读者跟我有一样的问题&#xff0…

程序员养发神器:拒绝加班熬夜,告别秃头!

身为一个程序员&#xff0c;每天的工作就是写代码和吹牛逼&#xff0c;但是代码写多了&#xff0c;都没有多少让自己吹的时间了。摸鱼时间少是我们太菜了吗&#xff1f;可不要小瞧自己&#xff0c;可能是你没掌握方法。 我自己本身就是一个十分疯狂的工具收集者&#xff0c;收…

实在智能RPA数字员工竞技“宝罗杯”机器人创新总决赛,斩获佳绩!

近日&#xff0c;由中国钢铁工业协会和中国自动化学会指导&#xff0c;中国宝武钢铁集团有限公司主办、宝信软件承办的机器人行业领域的“宝罗杯”机器人创新大赛总决赛在中国宝武上海总部圆满收官。 此次大赛旨在充分凝聚社会智力&#xff0c;聚焦工业机器人的应用场景&#x…

es深度分页原因概念及处理方法

概述 当使用es分页查询的时候&#xff0c;如果查询的数据太靠后了&#xff0c;就会产生深度分页问题。 假设es有3个节点&#xff0c;node1,node2,node3 查询 limti 50000,50 假设请求的是node1,此时会在每个节点上抓出 50050条数据&#xff0c;然后在node1汇总排序&#xff0…

【设计模式】装饰器模式

装饰器模式 以生活中的场景来举例&#xff0c;一个蛋糕胚&#xff0c;给它涂上奶油就变成了奶油蛋糕&#xff0c;再加上巧克力和草莓&#xff0c;它就变成了巧克力草莓蛋糕。 像这样在不改变原有对象的基础之上&#xff0c;将功能附加到原始对象上的设计模式就称为装饰模式(D…

如何查看磁盘空间并挂载磁盘

df -h内容参数含义Filesystem文件系统Size分区大小1k-blocks单位是1KB(使用df查看)Used已用容量Avail还可用的容量Use%已用百分比Mounted on挂载点du -h查看某目录下占用空间最多的文件或目录。取前10个。需要先进入该目录下。du -cks * | sort -rn | head -n 10参数含义-s对每…

腾讯游戏,“迷失”自己

【潮汐商业评论/原创】“那个号我忘记密码了&#xff0c;你等我换个新号跟你玩”。这是Lynn《王者荣耀》双排队友常说的话。因为未成年&#xff0c;账号只有周末能玩&#xff0c;而且只有两小时。所以Lynn的这位网友&#xff0c;经常用家长的手机号注册游戏账号&#xff0c;但是…

Yarn调度器和调度算法

目录 1 先进先出调度器&#xff08;FIFO&#xff09; 2 容量调度器&#xff08;Capacity Scheduler&#xff09; 3 公平调度器&#xff08;Fair Scheduler&#xff09; 缺额&#xff1a; 公平调度器队列资源分配方式 公平调度器资源分配算法 Hadoop作业调度器主要有三种&…