React-Hooks之useRef

作者: YiYa_咿呀 | 来源:发表于2023-02-13 22:22 被阅读0次
1.什么是useRef Hook?

useRef就是createRef的Hook版本用来获取元素, 只不过比createRef更强大一点
createRef只能获取普通元素和类元素,并且只能获取到类组件的实例对象,不能拿到函数式组件

import React, {createRef, useRef} from 'react';
class Home extends React.PureComponent{
    render() {
        return (
            <div>Home</div>
        )
    }
}
function About() {
    return (
        <div>About</div>
    )
}
function App() {
    const pRef = createRef();
    const homeRef = createRef();
    function btnClick() {
        console.log(pRef.current);
        console.log(homeRef.current);
    }
    return (
        <div>
            <p ref={pRef}>我是段落</p>
            <Home ref={homeRef}/>
            <About/>
            <button onClick={()=>{btnClick()}}>获取</button>
        </div>
    )
}
export default App;
import React, {createRef, useRef} from 'react';
class Home extends React.PureComponent{
    render() {
        return (
            <div>Home</div>
        )
    }
}
function About() {
    return (
        <div>About</div>
    )
}
function App() {
    // const pRef = createRef();
    // const homeRef = createRef();
    const pRef = useRef();
    const homeRef = useRef();
    function btnClick() {
        console.log(pRef.current);
        console.log(homeRef.current);
    }
    return (
        <div>
            <p ref={pRef}>我是段落</p>
            <Home ref={homeRef}/>
            <About/>
            <button onClick={()=>{btnClick()}}>获取</button>
        </div>
    )
}
export default App;

两种方法都能拿到ref,结果如下:


createRef.png

createRef和useRef

  1. useState和useRef区别:
    useRef中保存的数据, 除非手动修改, 否则永远都不会发生变化
const age = useRef(18);

如果说useRef也可以保存数据的话那么为什么还要有useState呢?

function App() {
    const pRef = createRef();
    const homeRef = useRef();
    function btnClick() {
        console.log(pRef); // {current: p}
        console.log(homeRef); // {current: Home}
    }
    const [numState, setNumState] = useState(0);
    // const age = useRef(18); // {current: 18}
    const age = useRef(numState); // {current: 0}
    useEffect(()=>{
        age.current = numState;
    }, [numState]);
    return (
        <div>
            <p>上一次的值: {age.current}</p>
            <p>当前的值  :{numState}</p>
            <button onClick={()=>{setNumState(numState + 1)}}>增加</button>
        </div>
    )
}
export default App;

总结一下:
useRef可以获取元素,可以保存数据
createRef的区别是可以保存数据
useState的区别是:useRef中保存的数据, 除非手动修改, 否则永远都不会发生变化

相关文章

  • React Hooks系列之useRef

    一、useRef 是什么? const myRef = useRef(initialValue); useRef ...

  • React-03 Ref的演变

    stringRef: createRef: useRef: const curRef = useRef(); co...

  • react-hooks

    react-hooks react-hooks 是react16.8以后,react新增的钩子API,目的是增加代...

  • react-hooks

    前置 学习面试视频 总结react hooks react-hooks react-hooks为函数组件提供了一些...

  • useRef和createRef区别

    useRef和createRef区别 官网的定义如下:useRef returns a mutable ref o...

  • React hooks之useRef

    接react hooks之effect、state[https://www.jianshu.com/p/b493a...

  • react hooks 之 useRef

    用来获取 DOM 元素,或者 class 组件实例 。 创建 useRef 时候,会创建一个原始对象,只要函数组件...

  • useRef、useImperativeHandle

    useRef可以直接获取dom元素 useRef结合useImperativeHandle可以通过父组件获取子组件...

  • useRef

    使用场景 1 .获取子组件的实例,只有类组件可以使用2 .在函数组件中定义一个全局变量,不会因为重复render重...

  • useRef

    1. 通过countRef.current解决capture value的现象 countRef.current可...

网友评论

    本文标题:React-Hooks之useRef

    本文链接:https://www.haomeiwen.com/subject/bnqskdtx.html