当前位置: 首页 > article >正文

vue3学习记录-nextTick

vue3学习记录-nextTick

  • 1. 案例场景
  • 2. 使用方法
    • 2.1 回调方式
    • 2.2 async,await
  • 3.原理

1. 案例场景

在这里插入图片描述
聊天框实现输入内容,滚动条默认滚到最底部。


<template>

    <div class="chat_box">
      <div class="chat_list" ref="chat_list">
        <div class="chat_item" v-for="(item, index) in menuList" :key="index">
          <span class="chat_item_name">{{ item.name }}:</span>
          <span class="chat_item_message">{{ item.message }}</span>
        </div>
      </div>
      <div class="chat_input" >
        <input type="text" placeholder="请输入内容" v-model="input" />
        <button @click="sendmsg">发送</button>
      </div>
    </div>
</template>

<script setup>
import { nextTick, ref,useTemplateRef } from 'vue'

let input = ref('')
const chatList = useTemplateRef('chat_list')
const menuList = ref([
  { name: '小南', message: '哈哈哈' },
])

const sendmsg = () =>{
  menuList.value.push({ name: '小邱', message: input.value })
  chatList.value.scrollTop = 999999
}

</script>

<style scoped lang="scss">
.chat_box{
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
}
.chat_list{
  height: 200px;
  width: 350px;
  margin: 0 auto;
  background-color: lightblue;
  overflow-y: auto;
  .chat_item{
    display: flex;
    border: 1px solid #000;
    margin: 16px 0;
  }
}
.chat_input{
  width: 350px;
}
</style>

vue3.5以后通过useTemplateRef访问模板引用,3.5之前的用ref来访问。代码中也写了使得每次的scrolltop到达底部,怎么没效果呢?
vue的更新dom是异步的,sendmsg 是同步的,所以到达底部的总是差最后一条数据的,到底了但是又没有完全到底。
nextTick就起作用了。

2. 使用方法

2.1 回调方式

import { nextTick, ref,useTemplateRef } from 'vue'
const sendmsg = () =>{
  menuList.value.push({ name: '小邱', message: input.value })
  nextTick(()=>{
    //chatList.value.scrollTop = 999999
    chatList.value.scrollTop = chatList.value.scrollHeight
  })
  
}

2.2 async,await

import { nextTick, ref,useTemplateRef } from 'vue'
const sendmsg = async () => {
  menuList.value.push({ name: '小邱', message: input.value })
  await nextTick()
  chatList.value.scrollTop = 999999
}

在这里插入图片描述
两种方法都可以达到效果。

3.原理

先学会用,反正获取不到dom,更新数据后还要操作dom就可以用这个了。原理:微任务队列的更新
连载中。。。


http://www.kler.cn/a/375059.html

相关文章:

  • ffmpeg之播放一个yuv视频
  • 软件测试之全链路压测详解
  • H3C交换机远程登录基本配置
  • 直流有刷电机多环控制(PID闭环死区和积分分离)
  • 【读书笔记】《论语别裁》爱与罪
  • TORCH_CUDA_ARCH_LIST
  • 【含文档】基于ssm+jsp的音乐播放系统(含源码+数据库+lw)
  • 如何使用和打开jconsole
  • 代码随想录 -- 动态规划 -- 不同路径 II
  • 给文件添加可读可写可执行权限
  • 15 Docker容器存储架构:docker存储驱动简介
  • 【计算机网络】关于信道
  • 20241028软考架构-------软考案例8答案
  • 迷茫内耗的一天
  • batc和mini-batch
  • 苹果开发 IOS 证书生成步骤
  • HT71672 13V,12A全集成同步升压转换器
  • Linux系统块存储子系统分析记录
  • stm32不小心把SWD和JTAG都给关了,程序下载不进去,怎么办?
  • CSS--导航栏案例
  • Python小白学习教程从入门到入坑------第十七课 内置函数拆包(语法基础)
  • 100种算法【Python版】第30篇——IDA*算法
  • Altium Designer使用技巧(一)
  • 向量数据库:PGVector 为AI知识库做准备
  • qt QRadioButton详解
  • 人工智能:改变未来生活与工作的无尽可能