ref 使用方法
Refs 在 React 中起初的作用是做到对Dom 元素的引用,当我们想操作的原生 DOM 元素的时候,我们可以使用Ref 做到对元素的引用。
除了保持对 DOM 元素的引用之外,还可以保持对某个值的引用。
在编写组件的时候,我们可能需要用到非受控组件,如果我们自定义一个Input 组件,这个时候需要有非受控的方式的话,我们需要暴露出ref 给父组件,用以获取input 控件的value。这个时候,需要用 ForwardedRef 方法,用于暴露 ref 给父组件。React.forwardRef
会创建一个React组件,这个组件能够将其接受的 ref 属性转发到其组件树下的另一个组件中。
参考学习视频
use Ref 获取 DOM 元素
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
import React, { useRef } from "react";
const Child1 = (props) => {
console.log(props)
return (
<div>
CHILD !!!!!!
<button onClick={()=>props.callback()} >
btn
</button>
</div>
)
}
export default function UseRefExample() {
const childRef = useRef(null)
const btnClicked = () => {
console.log(childRef.current)
}
return (
<div>
helloworld
<div ref={childRef}>
world1
</div>
<Child1 callback={btnClicked} />
</div>
)
}
|
useRef 的其他用法
注意: 修改 ref 的值是不会触发 UI 的更新的, 所以 还是要用 setState的方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
import React, { useEffect, useRef } from "react";
import useWinSize from './useWinSize'
const Child1 = (props) => {
console.log(props)
return (
<div>
CHILD !!!!!!
<button onClick={()=>props.callback()} >
btn
</button>
</div>
)
}
export default function UseRefExample() {
const childRef = useRef(null)
const btnClicked = () => {
console.log(childRef.current)
}
const winSize = useWinSize()
const numRef = useRef(1)
useEffect(()=>{
console.log('windows change',winSize)
numRef.current++;
console.log('update cnt',numRef)
},[winSize])
return (
<div>
helloworld
<div ref={childRef}>
world1
</div>
<Child1 callback={btnClicked} />
</div>
)
}
|