Vue 和 React 使用ref的示例詳解
ref 用于訪問 DOM 元素或子組件實(shí)例
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 是一個(gè)響應(yīng)式對象,修改 ref 的值會觸發(fā)組件的重新渲染。因?yàn)?Vue 的 ref 是基于其響應(yīng)式系統(tǒng)實(shí)現(xiàn)的,任何對 ref 的修改都會被 Vue 檢測到,并觸發(fā)組件的更新。
React 函數(shù)組件通過useRef Hook 來實(shí)現(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)建了一個(gè) ref 對象,并將其初始值設(shè)置為 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ù)組件中轉(zhuǎn)發(fā) ref(forwardRef): forwardRef 允許父組件訪問子組件中的 DOM 元素或組件實(shí)例
使用 forwardRef 將 ref 從父組件傳遞到子組件
父組件通過 inpt 訪問子組件中的 <input> 元素


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


React 類組件 createRef
1. 通過createRef創(chuàng)建一個(gè)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 訪問子組件的實(shí)例,并調(diào)用子組件的方法(如 focus)
這種方式僅適用于類組件,函數(shù)組件沒有實(shí)例

函數(shù)式子組件 forwardRef

到此這篇關(guān)于Vue 和 React 使用ref的文章就介紹到這了,更多相關(guān)Vue 和 React 使用ref內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue項(xiàng)目在env文件中設(shè)置的變量無效問題及解決
這篇文章主要介紹了vue項(xiàng)目在env文件中設(shè)置的變量無效問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-03-03
electron + vue項(xiàng)目實(shí)現(xiàn)打印小票功能及實(shí)現(xiàn)代碼
這篇文章主要介紹了electron + vue項(xiàng)目實(shí)現(xiàn)打印小票功能,需要的朋友可以參考下2018-11-11
vue構(gòu)建單頁面應(yīng)用實(shí)戰(zhàn)
本篇文章主要介紹了vue構(gòu)建單頁面應(yīng)用實(shí)戰(zhàn),使用 SPA,沒有頁面切換,就沒有白屏阻塞,可以大大提高 H5 的性能,達(dá)到接近原生的流暢體驗(yàn)。2017-04-04
Vue3管理后臺項(xiàng)目使用高德地圖選點(diǎn)的實(shí)現(xiàn)
本文主要介紹了Vue3管理后臺項(xiàng)目使用高德地圖選點(diǎn)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
element自定義表單驗(yàn)證上傳身份證正反面的實(shí)現(xiàn)
表單驗(yàn)證在很多地方都可以用的到,本文主要介紹了element自定義表單驗(yàn)證上傳身份證正反面的實(shí)現(xiàn),文中根據(jù)實(shí)例編碼詳細(xì)介紹的十分詳盡,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03

