ref使用详解

Posted 一杯清泉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ref使用详解相关的知识,希望对你有一定的参考价值。

一、字符串形式的ref(官方已过时)

        ref可以理解成打一个标识,类似于一个id,最终会收集到this对象的refs里面。

<input ref='input1' type='text' placeholder='输入内容点击按钮' />
<button onClick=this.showData>点我提示</button>
<input ref='input2' onBlur=this.showData2 type='text' placeholder='移除光标焦点' /
//左侧输入框的数据
showData = () => 
    //虚拟dmo转成真实dom真正的节点,可以获取任意属性
    console.log(this.refs.input1);
    console.log(this.refs.input1.value);
    alert(this.refs.input1.value)

//右侧输入框的数据
showData2 = () => 
    //虚拟dmo转成真实dom真正的节点,可以获取任意属性
    console.log(this.refs.input2);
    const  input2  = this.refs
    alert(input2.value)
 

二、回调函数形式的ref(常用)

        字符串形式的ref效果不高,已经被废弃,未来会被移除。常用的输入下:

 /*this指的是render上下文,将该标签节点挂载在实例自己上赋值给input1变量*/
<input ref=(e) =>  this.input1 = e  type='text' placeholder='输入内容点击按钮' />
<button onClick=this.showData>点我提示</button>
<input ref=(e) => this.input2 = e onBlur=this.showData2 type='text' placeholder='移除光标焦点' />
//左侧输入框的数据
showData = () => 
    console.log(this.input1);
    alert(this.input1.value)

//右侧输入框的数据
showData2 = () => 
    console.log(this.input2);
    const input2 = this
    alert(input2.value)

        关于回调 refs 的说明:

        以上方法在大多数情况下它是无关紧要的,开发中比较常用,但是在配合state有一点小影响影响可以忽略,除非比较关心: 参考 Refs and the DOM – React,最后一行,关于回调 refs 的说明。优化如下

<input ref=this.saveInput type='text' placeholder='输入内容点击按钮' />
<button onClick=this.showData>点我提示</button>
showData = () => 
    const  input1  = this
    console.log(input1);
    alert(input1.value)


saveInput = (e) => 
    this.input1 = e;
    console.log(e);

三、creactRef方式创建ref(最新)

class MyComponent extends React.Component 

    /**
     * React.creactRef可以返回一个容器,该容器可以存储被ref所标识的节点,有几个组件、标签的ref就需要几个createRef创建,
     * 不能共用一个,多个标签添加一个后加的的覆盖之前加的,几个标签创建一个ref。
     **/
    myRef1 = React.createRef();
    myRef2 = React.createRef();

    render() 
        return (
            <div>
                /*当执行的时候发现myRef是由createRef创建的,会把这个节点加入到容器中*/
                <input ref=this.myRef1 type='text' placeholder='输入内容点击按钮' />
                <button onClick=this.showData>点我提示</button>
                <input ref=this.myRef2 onBlur=this.showData2 type='text' placeholder='移除光标焦点' />
            </div>
        )
    

    showData = () => 
        alert(this.myRef1.current.value);
    

    showData2 = () => 
        alert(this.myRef1.current.value);
    

        不推荐大量的使用ref,会引发性能问题。

以上是关于ref使用详解的主要内容,如果未能解决你的问题,请参考以下文章

C++ std::ref() 函数使用详解

vue中$refs的用法及作用详解

vue组件 $children,$refs,$parent的使用详解

Vue.js 源码分析 ref属性详解

详解osg::ref_ptr

React--ref详解