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 = 999999chatList.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.xdnf.cn/news/2206.html

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

相关文章

microsoft defender smartscreen怎么关闭

打开windows安全中心 点击基于声誉的保护设置 把检查应用和文件等开关关掉即可

【c++日常刷题】两个数字的交集、点击消除、最小花费爬楼梯

两个数字的交集⭐ 两个数组的交集_牛客题霸_牛客网 (nowcoder.com) 题目描述&#xff1a; 解题思路&#xff1a; 通过遍历num1&#xff0c;如果遍历到的元素如果在num2中能找到&#xff0c;则这是num1和num2的公告元素&#xff1b; 这里需要借助两个数组来实现&#xff1a;…

【ACM出版,EI稳定检索,九大高校联合举办, IEEE Fellow支持】2024年计算机视觉与艺术研讨会(CVA 2024,11月29-12月1日)

大会官网&#xff1a;www.icadi.net (CVA为ICADI分会&#xff0c;网站沿用主会议&#xff1b;议程、出版将以主会为准&#xff09; 大会时间&#xff1a;2024年11月29-12月1日 大会地点&#xff1a;中国-天津 终轮截稿&#xff1a;2024年11月22号&#xff08;特殊情况联系会…

Leetcode—3216. 交换后字典序最小的字符串【简单】

2024每日刷题&#xff08;196&#xff09; Leetcode—3216. 交换后字典序最小的字符串 实现代码 class Solution { public:int flagodd_even(int num) {if(num % 2) {// 奇数return 1;} else {// 偶数return 0;}}string getSmallestString(string s) {int n s.length();int …

HarmonyOS Next星河版笔记--界面开发(3)

属性 1.1.设计资源-svg图标 需求&#xff1a;界面中展示图标→可以使用的svg图标(任意放大缩小不失真、可以改变颜色) 使用方式&#xff1a; ①设计师提供&#xff1a;基于项目的图标&#xff0c;拷贝到项目目录使用 Image($r(app.media.ic_dianpu)) .width(40) fillColor…

从数据提取到管理:TextIn平台的全面解析与产品体验

一、引言 在现代信息时代&#xff0c;文档解析和管理已经成为企业和开发者不可或缺的工具。TextIn是合合信息旗下的一款智能文档处理平台&#xff0c;为开发者和企业提供高效、精准的文档解析工具&#xff0c;帮助用户轻松应对各种复杂的文档处理需求。本文将深入探讨TextIn的…

WorkFlow源码剖析——Communicator之TCPServer(中)

WorkFlow源码剖析——Communicator之TCPServer&#xff08;中&#xff09; 前言 上节博客已经详细介绍了workflow的poller的实现&#xff0c;这节我们来看看Communicator是如何利用poller的&#xff0c;对连接对象生命周期的管理。&#xff08;PS&#xff1a;与其说Communica…

路由参数与请求方式

文章目录 命令创建控制器先创建laravel 工程 处理请求方式路由参数必选参数可选参数 路由别名重定向至路由别名 命令创建控制器 先创建laravel 工程 composer create-project --prefer-dist laravel/laravel使用二级目录 处理请求方式 // 基本路由 Route::any(d1,function(){r…

HarmonyOS:UIAbility组件概述

一、概述 UIAbility组件是一种包含UI的应用组件&#xff0c;主要用于和用户交互。 UIAbility的设计理念&#xff1a; 原生支持应用组件级的跨端迁移和多端协同。支持多设备和多窗口形态。 UIAbility划分原则与建议&#xff1a; UIAbility组件是系统调度的基本单元&#xff0c…

【解决办法】无法使用右键“通过VSCode打开文件夹”

个人博客&#xff1a;苏三有春的博客 前言 作者的编程环境为VScode&#xff0c;工作时常使用VScode打开整个工程文件夹。如果先打开VScode再从VScode中选择文件夹打开效率太慢&#xff0c;作者一般使用的方式是右键文件夹&#xff0c;直接选择"通过code打开文件夹"…

java 20 Stream流

一.Stream 1.所在包 import java.util.stream.*; 2.中间方法与终端方法 //中间方法返回的stream类型 可以连续调用 //终端方法--》返回类型肯定不是Steam 【long void Optional int .... //中间方法必须以终端方法收尾才能执行 //否则中间方法不执行 //终端方法后面肯定没有…

leetcode 2710 移除字符串中的尾随零

1.题目要求: 2.题目代码: class Solution { public:string removeTrailingZeros(string num) {while(num[num.size() - 1] 0){num.pop_back();}return num;} };

AI问答:Google Authenticator(谷歌动态口令) / 设置及操作过程记录

Google Authenticator&#xff0c;即谷歌身份验证器&#xff0c;是谷歌推出的一款基于时间的一次性密码&#xff08;Time-based One-time Password&#xff0c;简称TOTP&#xff09;验证工具。以下是关于Google Authenticator验证的详细解释。 一、工作原理 Google Authentic…

基于STM32的工厂短距离安防巡逻机器人设计:ZIgBee、OpenCV、人工智能(AI)算法(代码示例)

一、项目概述 随着工业化的迅速发展&#xff0c;工厂的安全管理显得尤为重要。为了提高工厂的安全性&#xff0c;我们设计了一款基于STM32的安防巡逻机器人。该机器人能够在工厂内部自主巡逻&#xff0c;实时监控环境&#xff0c;并通过多种传感器和智能算法进行异常检测和处理…

【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型

一、介绍 车辆车型识别&#xff0c;使用Python作为主要编程语言&#xff0c;通过收集多种车辆车型图像数据集&#xff0c;然后基于TensorFlow搭建卷积网络算法模型&#xff0c;并对数据集进行训练&#xff0c;最后得到一个识别精度较高的模型文件。再基于Django搭建web网页端操…

Windows基础之病毒编写

声明&#xff1a;学习视频来自b站up主 泷羽sec&#xff0c;如涉及侵权马上删除文章 声明&#xff1a;本文主要用作技术分享&#xff0c;所有内容仅供参考。任何使用或依赖于本文信息所造成的法律后果均与本人无关。请读者自行判断风险&#xff0c;并遵循相关法律法规。 感谢泷…

基于SSM+小程序的宿舍管理系统(宿舍1)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 本宿舍管理系统小程序有管理员和学生两个角色。 1、管理员功能有个人中心&#xff0c;公告信息管理&#xff0c;班级管理&#xff0c;学生管理&#xff0c;宿舍信息管理&#xff0c;宿舍…

时间序列预测(十七)——滑动窗口的使用

这里只是对滑动窗口在时间序列预测中使用做一个分析总结&#xff0c;关于滑动窗口的详细介绍可以参考其他博文。 滑动窗口是一种常用的技术&#xff0c;它通过使用固定大小的窗口来创建训练样本&#xff0c;以便捕捉时间序列中的模式。适用于多种时间序列模型&#xff0c;包括…

git远程和本地创建分支并关联

1.github创建dev分支 点击branches&#xff1a; 创建一个新分支&#xff0c;可以命名为dev 在vscode创建新分支dev 如果远程dev分支在这没有表现出来 在终端执行&#xff1a;git fetch --all 然后手动切换&#xff08;签出/checkout)到dev分支&#xff0c;使用如下命令让…

病床呼叫器设计仿真与实物制作

某医院有编号为1~9号的9个病房&#xff0c;现利用数字电路&#xff0c;设计并制作病房呼叫系统&#xff0c;要求系统功能如下&#xff1a; &#xff08;1&#xff09;病房 ①呼叫功能&#xff1a;每个病房都装有1个呼叫按钮&#xff0c;在病人需要时&#xff0c;可以通过呼叫…