首页 > 其他分享 >vue3 tsx ref获取dom写法

vue3 tsx ref获取dom写法

时间:2025-01-20 22:38:16浏览次数:1  
标签:元素 DOM dom value myElementRef tsx 组件 ref

在 Vue 3 中使用 TSX 并结合 ref 来获取 DOM 元素或组件实例,可以通过 Vue 提供的组合式 API(Composition API)来实现。Vue 3 支持 JSX/TSX 语法,允许你在函数式组件中编写类似 JSX 的代码。下面是一个具体的示例,展示了如何在 TSX 中使用 ref 来获取 DOM 元素。

步骤

  1. 安装必要的依赖:确保你已经安装了 @vue/runtime-dom@vue/reactivity,这些是 Vue 3 运行时和响应式系统的核心库。

  2. 创建一个 Vue 组件并使用 ref 获取 DOM 元素

示例代码

import { defineComponent, ref, onMounted } from 'vue';

export default defineComponent({
  name: 'MyComponent',
  setup() {
    // 创建一个 ref 来存储对 DOM 元素的引用
    const myElementRef = ref<HTMLElement | null>(null);

    // 在组件挂载后访问 DOM 元素
    onMounted(() => {
      if (myElementRef.value) {
        console.log('DOM element:', myElementRef.value);
        // 你可以在这里执行任何操作,比如修改样式、添加事件监听器等
        myElementRef.value.style.backgroundColor = 'lightblue';
      }
    });

    return () => (
      <div>
        {/* 使用 ref 属性将 DOM 元素与 ref 关联 */}
        <div ref={myElementRef}>This is a div element</div>
        <button onClick={() => {
          if (myElementRef.value) {
            alert(`The width of the div is ${myElementRef.value.offsetWidth}px`);
          }
        }}>Get Div Width</button>
      </div>
    );
  },
});

解释

  1. 定义 ref

    • 使用 ref<HTMLElement | null>(null) 创建一个 ref,用于存储对 DOM 元素的引用。这里的类型注解 <HTMLElement | null> 明确指定了 ref 可能包含一个 HTMLElementnull
  2. 挂载后的操作

    • 使用 onMounted 钩子,在组件挂载完成后访问 DOM 元素。如果 myElementRef.value 不为 null,则可以对其进行操作。
  3. 返回渲染函数

    • 返回一个渲染函数,其中使用 ref 属性将 DOM 元素与 myElementRef 关联起来。
    • 在按钮点击事件中,通过 myElementRef.value 访问 DOM 元素,并执行相应的操作(如显示宽度)。

注意事项

  • 类型安全:在 TSX 中使用 ref 时,务必指定正确的类型以确保类型安全。例如,如果你要引用的是一个特定类型的元素(如 HTMLDivElement),可以这样声明:const myElementRef = ref<HTMLDivElement | null>(null);

  • 异步更新:有时你需要确保在 DOM 更新后执行某些操作。在这种情况下,可以使用 nextTick 函数来等待 DOM 更新完成后再进行操作。

    import { nextTick } from 'vue';
    
    onMounted(() => {
      nextTick(() => {
        if (myElementRef.value) {
          console.log('Updated DOM element:', myElementRef.value);
        }
      });
    });
    
  • 组件实例的引用:如果你想引用一个子组件实例而不是 DOM 元素,可以使用相同的 ref 方法,但需要指定适当的类型。例如:

    const childComponentRef = ref<typeof ChildComponent | null>(null);
    
    return (
      <ChildComponent ref={childComponentRef} />
    );
    

通过这种方式,你可以在 Vue 3 的 TSX 组件中灵活地使用 ref 来获取和操作 DOM 元素或组件实例。这不仅提高了代码的可读性和维护性,还充分利用了 TypeScript 的类型检查功能。

标签:元素,DOM,dom,value,myElementRef,tsx,组件,ref
From: https://www.cnblogs.com/jocongmin/p/18682599

相关文章

  • 用原生js获取DOM元素的方法有哪些?
    在原生JavaScript中,有多种方法可以获取DOM元素。以下是一些常见的方法:getElementById(id):通过元素的id属性获取元素。这是最快的方式,因为id在HTML文档中是唯一的。varelement=document.getElementById("myElementId");getElementsByClassName(className):通过元素的c......
  • 【迁移学习】原型引导领域感知渐进表示学习(prototype-guided domain-aware progressiv
    【迁移学习】原型引导领域感知渐进表示学习(prototype-guideddomain-awareprogressiverepresentationlearningPG-DPRL)(二)【迁移学习】原型引导领域感知渐进表示学习(prototype-guideddomain-awareprogressiverepresentationlearningPG-DPRL)(二)文章目录【迁移学......
  • JavaScript笔记APIs篇02——DOM事件
     黑马程序员视频地址:黑马程序员前端JavaScript入门到精通全套视频教程https://www.bilibili.com/video/BV1Y84y1L7Nn?vd_source=0a2d366696f87e241adc64419bf12cab&spm_id_from=333.788.videopod.episodes&p=78 目录事件监听(绑定)事件监听其他版本(了解)事件类型事件对象......
  • onload事件和domcontentloaded哪个先执行呢?
    在前端开发中,关于onload事件和DOMContentLoaded事件的执行顺序,可以明确地回答:DOMContentLoaded事件先于onload事件执行。事件定义与触发时机:DOMContentLoaded事件:当HTML文档被完全加载和解析完成后触发,不等待样式表、图像和子框架的完成加载。onload事件:当整个页面及所有依......
  • Shadow DOM和Virtual DOM有什么区别?
    ShadowDOM和VirtualDOM在前端开发中都是重要的概念,但它们之间存在明显的区别。以下是对这两者区别的清晰归纳:一、ShadowDOM封装性:ShadowDOM允许开发者在HTML元素内部创建一个独立的DOM子树,这个子树与外部的页面是隔离的。这种封装性使得组件的内部结构和样式不会与外部页面......
  • Chromium CDP 开发(十三):为自己的Domain建立CustomCDPHandler
    引言在开发ChromiumCDP(ChromeDevToolsProtocol)时,除了创建PDL和JSON文件来定义自定义的CDPDomain和指令外,还需要编写对应的Handler实现文件,以便使这些自定义指令能够被正确执行。本章将详细介绍如何为自定义的CDPDomain创建和实现Handler文件custom_cdp_ha......
  • JavaScript中通过array.map()实现数据转换、创建派生数组、异步数据流处理、复杂API请
    目录JavaScript中通过array.map()实现数据转换、创建派生数组、异步数据流处理、复杂API请求、DOM操作、搜索和过滤等,array.map()的使用详解(附实际应用代码)一、什么时候该使用Array.map(),与forEach()的区别是什么?1、什么时候该用Array.map()2、Array.map()与Array.forEach()的......
  • .Net的AppDomain
     一、AppDomain的作用 AppDomain(应用程序域)是一种在.NET中提供的隔离机制,用于将应用程序的不同部分隔离开来,以提高安全性、可靠性和可管理性。以下是其主要的功能和用途: 隔离性:允许在一个进程中运行多个应用程序,同时使它们相互隔离。这样可以避免一个应用程序中的错......
  • 解析function(_0x457ace, _0x349832) 即random出处
    function(_0x457ace,_0x349832){ _0x457ace=_0x457ace-0x18a; var_0x4c6e1a=_0x19971f[_0x457ace]; if(a0_0x457a['pIaRKj']===undefined){ var_0x2a073e=function(_0x3f86c9){ var_0x153ef8='abcdefghijklmnopqrstuvwxyzABCDEFGH......
  • psSign、random推导
    入口:传递的参数值:sign函数function(){ var_0x36c5d3=_0x79c1ce; let_0x479298=arguments[_0x36c5d3(0x5a9,'PHXL')]>0x0&&void0x0!==arguments[0x0]?arguments[0x0]:{}; try{ var_0x1a6f66; if(!_0x32d6a8[_0x36c5d3(0x4d7,&......