vue3使用nextTick

这篇具有很好参考价值的文章主要介绍了vue3使用nextTick。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

学习链接

Vue之nextTick原理
nextTick原理

示例

  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>

vue3使用nextTick文章来源地址https://www.toymoban.com/news/detail-446082.html

到了这里,关于vue3使用nextTick的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 在vue中如何使用nextTick ?nextTick 的原理是什么?

    Vue.js 是一个流行的前端框架,它提供了一种响应式的数据绑定机制,使得页面的数据与页面的 UI 组件之间能够自动同步。Vue.js 中的数据驱动模型可以让开发者专注于业务逻辑,而不用过多地关注页面 DOM 操作的细节。然而,在某些情况下,我们需要在页面中进行 DOM 操作,而

    2023年04月20日
    浏览(26)
  • vue vue3中使用nextTick和forceUpdate及注意事项

    一、 vue中使用forceUpdate 作用:在Vue官方文档中指出,$forceUpdate具有强制刷新的作用,迫使vue实例重新(rander)渲染虚拟dom,注意它仅仅影响实例本身和插入插槽内容的子组件,而不是所有子组件。 在vue2中使用 vue3中使用 这样使用的时候会报错 Property ‘ctx’ does not exist on t

    2024年02月10日
    浏览(29)
  • Vue中$nextTick主要作用、原理及使用方法

    查看本专栏目录 关于作者 还是大剑师兰特 :曾是美国某知名大学计算机专业研究生,现为航空航海领域高级前端工程师;CSDN知名博主,GIS领域优质创作者,深耕openlayers、leaflet、mapbox、cesium,canvas,webgl,echarts等技术开发,欢迎加底部微信,一起交流。 热门推荐 内容链接

    2024年02月21日
    浏览(31)
  • vue3 nextTick()应用

    在Vue3中,可以使用 nextTick 函数来延迟执行某些操作,这些操作会在下一次DOM更新周期之后执行。这个函数通常用于在数据更新后,等待DOM更新之后执行一些操作,比如获取DOM元素的尺寸、位置等。 例如,以下一个切换元素显示的组件: 打印结果: 如果show是true,那么conte

    2024年02月04日
    浏览(31)
  • Vue2异步更新及nextTick原理

    vue 官网中是这样描述 nextTick 的 在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,可以获取更新后的 DOM。 在学习 nextTick 是如何实现之前,我们要先了解下 JavaScript 的执行机制 浏览器是多线程的,例如GUI渲染线程、JS引擎线程、事件监听线程等

    2023年04月09日
    浏览(24)
  • Vue学习笔记5-- nextTick | Vue封装的过渡与动画

    语法: this.$nextTick(回调函数) 作用:在下一次DOM更新结束后执行其指定的回调。 什么时候用:当改变数据后,要基于更新后的新DOM进行某些操作时,要在nextTick所指定的回调函数 在一个函数中,一般要函数执行完之后才会更新DOM,但有些涉及到DOM的操作比如获取焦点 this.

    2024年01月17日
    浏览(29)
  • vue3的setup的使用和原理解析

    最近在做vue3相关的项目,用到了组合式api,对于vue3的语法的改进也是大为赞赏,用起来十分方便。对于已经熟悉vue2写法的同学也说,上手还是需要一定的学习成本,有可能目前停留在会写会用的阶段,但是setup带来哪些改变,以及ref,reactive这两api内部实现原理到底是什么,

    2024年02月02日
    浏览(28)
  • Vue3 - 解决使用 Tailwindcss 后导致 UI 组件库样式受影响,引入后发现项目组件库的组件样式不对了(Element/Ant Design Vue/Naive UI/TDesign)

    网上的教程都无法解决,但本文可以帮助您快速解决该问题。 当项目引入 Tailwind css 后,使用 UI 组件库的某些组件时,发现有些样式丢失及显示错位、背景色丢失等问题, 频发于【按钮组件】背景色丢失 | 【message消息提示组件】样式位置变形等,严重的整个组件库样式都乱

    2024年02月07日
    浏览(48)
  • vue3的ref,reactive的使用和原理解析

    目录 1.前言 2.比较 3.ref源码解析 4.reactive源码解析 createReactiveObject handles的组成 get陷阱 set陷阱 5.总结 vue3新增了ref,reactive两个api用于响应式数据,Ref 系列毫无疑问是使用频率最高的 api 之一,响应式意味着数据变动,页面局部自动更新。数据类型有基本数据类型(string,number

    2024年02月01日
    浏览(27)
  • 在vue中使用swiper轮播图(搭配watch和$nextTick())

    在组件中使用轮播图展示图片信息: 1.下载swiper,5版本为稳定版本 cnpm install swiper@5 2.在组件中引入swiper包和对应样式,若多组件使用swiper,可以把swiper引入到main.js入口文件中: import \\\'swiper/css/swiper.css\\\' //引入swiper样式 import Swiper from \\\'swiper\\\'; //引入swiper  3.在组件中使用: 由于我

    2024年02月13日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包