ref是什么意思?在hooks中怎样使用?

Admin 2021-09-10 群英技术资讯 1472 次浏览

    这篇文章主要介绍ref在hooks中怎样使用的内容,对新手来说,可能对ref不是很了解,不清楚ref是什么意思,因此下文就给大家来详细的介绍一下ref,感兴趣的朋友可以参考下,希望大家阅读完这篇文章能有所收获,接下来小编带着大家一起了解看看。

    一、首先说明下什么是Ref

    Ref 转发是一项将 ref 自动地通过组件传递到其一子组件的技巧。对于大多数应用中的组件来说,这通常不是必需的。但其对某些组件,尤其是可重用的组件库是很有用的

    二、ref在hooks中的用法

    1、ref在hooks中HTMLDom的用法

    这里就如官网一样正常使用即可

const Fn = ()=>{
    const testRef = useRef(null);
    console.log('testRef',testRef.current); // 会渲染两次,第一次打印null,第二次是<div>测试</div>
    return (
        <div ref={testRef}>测试</div>
    )
}

    2、ref在hooks中与函数式组件的用法

    这里只需要将ref属性透传到函数式组件中即可

const Fn = ()=>{
    const testRef = useRef(null);
    // 定义Test函数组件
    const Test = ({ refs }) => <div ref={refs}>我是ReactDOM test</div>;
    console.log('testRef',testRef.current); // 会渲染两次,第一次打印null,第二次是<div>我是ReactDOM test</div>
    return (
        {/* 这里之所以用refs而不用ref作为prop是因为ref会被react特殊处理,不会作为props透传到react组件中,类似于key */}
         <Test refs={testRef} /> 
    )
}

    3、ref在hooks中与类组件一同使用

    这里仅需要在类组件的回调ref中手动赋值给useRef对象即可,更多回调ref:这里

import ReactDom from 'react-dom';

const Fn = ()=>{
    const testClassRef = useRef(null);
    // 定义TestClass类组件
    class TestClass extends React.Component {
        render() {
          return (
            <div >
                我是TestClass类组件 测试
            </div>
          )
        }
    }
    console.log('testClassRef',testClassRef.current); 
    // 会渲染两次,第一次打印null,第二次是<div>我是TestClass类组件 测试</div>
    return (
        {/* 这里之所以用refs而不用ref作为prop是因为ref会被react特殊处理,不会作为props透传到react组件中,类似于key */}
         <TestClass 
             ref={el => {
                console.log('new render refs')
                testClassRef.current = ReactDom.findDOMNode(el);
             }} 
         /> 
    )
}

    4、ref在hooks中与class、react-redux一同使用

当遇到connect包裹的类组件时,因为最外层已经被包裹成了react-redux的Provider,所以需要将ref属性透传如真正React组件中,这个时候需要关注下connect的forwardRef属性

import ReactDom from 'react-dom';
import { connect } from 'react-redux';

const Fn = ()=>{
    const testClassRef = useRef(null);
    // 定义TestClass类组件
    class TestClass extends React.Component {
        render() {
          return (
            <div >
                我是TestClass类组件 测试
            </div>
          )
        }
    }
    //定义TestClass的connect包裹后的组件
    //forwardRef:true 设置redux允许将ref作为props传入到connect包裹的组件中
    const TestClassConnect = connect(null, null, null, { forwardRef: true })(TestClass);
    
    console.log('testClassRef',testClassRef.current); 
    // 会渲染两次,第一次打印null,第二次是<div>我是TestClass类组件 测试</div>
    return (
        {/* 这里之所以用refs而不用ref作为prop是因为ref会被react特殊处理,不会作为props透传到react组件中,类似于key */}
         <TestClassConnect
            ref={el => {
              console.log('new render refs')
              testClassRef.current = ReactDom.findDOMNode(el);
            }}
          />
    )
}

    现在大家对于ref是什么意思及ref在hooks中的用法应该都有所了解了吧,上述示例有一定的借鉴价值,有需要的朋友可以参考学习,希望对大家有帮助,想要了解更多大家可以关注群英网络其它相关文章。

文本转载自脚本之家

群英智防CDN,智能加速解决方案
标签: ref是什么意思

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。

猜你喜欢

成为群英会员,开启智能安全云计算之旅

立即注册
专业资深工程师驻守
7X24小时快速响应
一站式无忧技术支持
免费备案服务
免费拨打  400-678-4567
免费拨打  400-678-4567 免费拨打 400-678-4567 或 0668-2555555
在线客服
微信公众号
返回顶部
返回顶部 返回顶部
在线客服
在线客服