Vue 和 React 使用ref的示例详解

 更新时间:2025年04月07日 09:56:30   作者:lryh_  
在 Vue 中,ref 是一个响应式对象,修改 ref 的值会触发组件的重新渲染,因为 Vue 的 ref 是基于其响应式系统实现的,任何对 ref 的修改都会被 Vue 检测到,并触发组件的更新,本文给大家介绍Vue 和 React 使用ref的示例,感兴趣的朋友一起看看吧

ref 用于访问 DOM 元素或子组件实例

Vue2:

<template>
  <div>
    <input ref="inp" />
  </div>
</template>
<script>
export default {
  mounted() {
    this.$refs.inp.focus()
  }
}
</script>

Vue3 组合式API中使用ref 

<template>
  <div>
    <input ref="inp" />
  </div>
</template>
<script>
import { ref, onMounted } from 'vue';
export default {
  setup() {
    const inp = ref(null)
    onMounted(() => {
      inp.value.focus()
    })
    return {
      inp
    }
  }
}
</script>

        在 Vue 中,ref 是一个响应式对象,修改 ref 的值会触发组件的重新渲染。因为 Vue 的 ref 是基于其响应式系统实现的,任何对 ref 的修改都会被 Vue 检测到,并触发组件的更新。

React 函数组件通过useRef Hook 来实现:

useRef 不仅可以用于访问 DOM 元素,还可以存储任何可变值

import { useEffect, useRef } from "react"
const Hanshi = () => {
    const inp = useRef(null)
    useEffect(()=>{
        inp.current.focus()
    },[])
    return <>
        <div>
            <h3>函数组件</h3>
            <input type="text" ref={inp}/>
        </div>
    </>
 }
 export default Hanshi

useRef(null) 创建了一个 ref 对象,并将其初始值设置为 null

将 inp 绑定到 <input> 的 ref 属性上,这样 inp.current 就会指向该 DOM 元素

在 useEffect 中,通过 inp.current 访问 DOM 元素并调用 focus() 方法

存储任何可变值:与 useState 不同,修改 useRef 的值不会触发组件的重新渲染

import { useEffect, useRef } from "react"
const Hanshi = () => {
    const inp = useRef()
    const num = useRef(0)
    useEffect(()=>{
        inp.current.focus()
        num.current += 1
        console.log(`组件渲染了 ${num.current} 次`)
    },[])
    return <>
        <div>
            <h3>函数组件</h3>
            <input type="text" ref={inp}/>
        </div>
    </>
 }
 export default Hanshi

函数组件中转发 ref(forwardRef): forwardRef 允许父组件访问子组件中的 DOM 元素或组件实例

使用 forwardRef 将 ref 从父组件传递到子组件

父组件通过 inpt 访问子组件中的 <input> 元素

useImperativeHandle 自定义子组件暴露给父组件的 ref 值

useImperativeHandle 允许子组件自定义暴露给父组件的 ref 值

父组件可以通过 inpt.current 调用子组件暴露的方法(如 focus 和 getValue)

React 类组件 createRef

1. 通过createRef创建一个ref对象
2. 给元素绑定ref属性值  为创建的ref对象
3. 通过ref对象的current获取元素,再获取它的值

import { Component,createRef } from "react";
export default class Detail extends Component{
    inp = createRef()
    getInp(){
     console.log(this.inp.current.value)
    }
    componentDidMount(){
        this.inp.current.focus()
    }
    render() {
        return <div>
            <h3>类组件</h3>
            <input type="text" ref={this.inp}/>
            <button onClick={this.getInp.bind(this)}>获取值按钮</button>
        </div>
    }
}

类子组件

父组件通过 ref 访问子组件的实例,并调用子组件的方法(如 focus)

这种方式仅适用于类组件,函数组件没有实例

函数式子组件 forwardRef

到此这篇关于Vue 和 React 使用ref的文章就介绍到这了,更多相关Vue 和 React 使用ref内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue下拉刷新组件的开发及slot的使用详解

    vue下拉刷新组件的开发及slot的使用详解

    这篇文章主要介绍了vue下拉刷新组件的开发及slot的使用详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • vue项目在env文件中设置的变量无效问题及解决

    vue项目在env文件中设置的变量无效问题及解决

    这篇文章主要介绍了vue项目在env文件中设置的变量无效问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • 教你在vue 中使用 svg symbols

    教你在vue 中使用 svg symbols

    这篇文章主要介绍了如何在 vue 中使用 svg symbols,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • electron + vue项目实现打印小票功能及实现代码

    electron + vue项目实现打印小票功能及实现代码

    这篇文章主要介绍了electron + vue项目实现打印小票功能,需要的朋友可以参考下
    2018-11-11
  • vue构建单页面应用实战

    vue构建单页面应用实战

    本篇文章主要介绍了vue构建单页面应用实战,使用 SPA,没有页面切换,就没有白屏阻塞,可以大大提高 H5 的性能,达到接近原生的流畅体验。
    2017-04-04
  • vue3 axios安装及使用示例详解

    vue3 axios安装及使用示例详解

    这篇文章主要介绍了vue3 axios安装及使用示例代码,本文通过示例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-04-04
  • Vue3管理后台项目使用高德地图选点的实现

    Vue3管理后台项目使用高德地图选点的实现

    本文主要介绍了Vue3管理后台项目使用高德地图选点的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • element自定义表单验证上传身份证正反面的实现

    element自定义表单验证上传身份证正反面的实现

    表单验证在很多地方都可以用的到,本文主要介绍了element自定义表单验证上传身份证正反面的实现,文中根据实例编码详细介绍的十分详尽,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • 详细解读VUE父子组件的使用

    详细解读VUE父子组件的使用

    这篇文章主要介绍了详细解读VUE父子组件的使用,今天来讲一种子父组件深度耦合的方式,使我们不用额外的创建新的组件,也可以达到一些效果,下面与你们分享一下
    2023-05-05
  • Vue自定义依赖引入的最佳实践记录

    Vue自定义依赖引入的最佳实践记录

    在现代前端开发中,自定义引入依赖是提升开发效率的关键,unplugin-auto-import插件可以帮助开发者自动引入JS模块,包括本地编写的工具方法和第三方库,通过简单的配置,开发者可以实现Vue基本库、本地文件以及第三方插件的自动引入
    2024-10-10

最新评论