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 的值會觸發(fā)組件的重新渲染。因為 Vue 的 ref 是基于其響應式系統(tǒng)實現(xiàn)的,任何對 ref 的修改都會被 Vue 檢測到,并觸發(fā)組件的更新。
React 函數(shù)組件通過useRef Hook 來實現(xiàn):
useRef 不僅可以用于訪問 DOM 元素,還可以存儲任何可變值
import { useEffect, useRef } from "react"
const Hanshi = () => {
const inp = useRef(null)
useEffect(()=>{
inp.current.focus()
},[])
return <>
<div>
<h3>函數(shù)組件</h3>
<input type="text" ref={inp}/>
</div>
</>
}
export default HanshiuseRef(null) 創(chuàng)建了一個 ref 對象,并將其初始值設置為 null
將 inp 綁定到 <input> 的 ref 屬性上,這樣 inp.current 就會指向該 DOM 元素
在 useEffect 中,通過 inp.current 訪問 DOM 元素并調(diào)用 focus() 方法
存儲任何可變值:與 useState 不同,修改 useRef 的值不會觸發(fā)組件的重新渲染
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>函數(shù)組件</h3>
<input type="text" ref={inp}/>
</div>
</>
}
export default Hanshi
函數(shù)組件中轉發(fā) ref(forwardRef): forwardRef 允許父組件訪問子組件中的 DOM 元素或組件實例
使用 forwardRef 將 ref 從父組件傳遞到子組件
父組件通過 inpt 訪問子組件中的 <input> 元素


useImperativeHandle 自定義子組件暴露給父組件的 ref 值
useImperativeHandle 允許子組件自定義暴露給父組件的 ref 值
父組件可以通過 inpt.current 調(diào)用子組件暴露的方法(如 focus 和 getValue)


React 類組件 createRef
1. 通過createRef創(chuàng)建一個ref對象
2. 給元素綁定ref屬性值 為創(chuàng)建的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 訪問子組件的實例,并調(diào)用子組件的方法(如 focus)
這種方式僅適用于類組件,函數(shù)組件沒有實例

函數(shù)式子組件 forwardRef

到此這篇關于Vue 和 React 使用ref的文章就介紹到這了,更多相關Vue 和 React 使用ref內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
ElementUI之表格toggleRowSelection選中踩坑記錄
這篇文章主要介紹了ElementUI之表格toggleRowSelection選中踩坑記錄,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-03-03
使用mint-ui實現(xiàn)省市區(qū)三級聯(lián)動效果的示例代碼
下面小編就為大家分享一篇使用mint-ui實現(xiàn)省市區(qū)三級聯(lián)動效果的示例代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-02-02
vue-router history模式服務器端配置過程記錄
vue路由有hash和history兩種模式,這篇文章主要給大家介紹了關于vue-router history模式服務器端配置的相關資料,需要的朋友可以參考下2021-06-06
Vue3+Antd實現(xiàn)彈框顯示內(nèi)容并加入復制按鈕
這篇文章主要介紹了Vue3+Antd實現(xiàn)彈框顯示內(nèi)容并加入復制按鈕,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2023-12-12
Vue?Router路由hash模式與history模式詳細介紹
Vue?Router是Vue.js官方的路由管理器。它和Vue.js的核心深度集成,讓構建單頁面應用變得易如反掌。路由實際上就是可以理解為指向,就是我在頁面上點擊一個按鈕需要跳轉到對應的頁面,這就是路由跳轉2022-08-08
vue3中使用router路由實現(xiàn)跳轉傳參的方法
這篇文章主要介紹了vue3中使用router路由實現(xiàn)跳轉傳參的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-03-03
vue項目預覽excel表格功能(file-viewer插件)
這篇文章主要介紹了vue項目預覽excel表格功能(file-viewer插件),本文分步驟結合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2023-10-10

