最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • React中Refs的几种用法

    正文概述 掘金(柬纸)   2021-05-22   458

    React.createRef()

    class CustomTextInput extends React.Component {
        constructor(props) {
            super(props);
            this.textInput = React.createRef();
            this.focusTextInput = this.focusTextInput.bind(this);
        }
    
        focusTextInput() {
            this.textInput.current.focus();
        }
    
        render() {
            return (
                <div>
                    <input
                        type="text"
                        ref={this.textInput} />
                    <input
                        type="button"
                        value="Focus the text input"
                        onClick={this.focusTextInput}
                    />
                </div>
            );
        }
    }
    

    1.创建锚点对象

    使用React.createRef()后是创建一个Object对象,这个对象的属性为空,__proto__指向的是Object的原型函数

    2.在标签处绑定锚点对象

    <input type="text" ref={this.textInput} />
    

    渲染后,让this.textInput.current=input,即指向锚点处的DOM标签

    3.使用锚点

    <input
        type="button"
        value="Focus the text input"
        onClick={this.focusTextInput}
    />
    

    点击后触发focusTextInput(),执行函数,内部让锚点处聚焦

    回调Refs

    class CustomTextInput extends React.Component {
        constructor(props) {
            super(props);
            this.textInput = null;
            this.focusTextInput = () => {
                // 聚焦
                if (this.textInput){
                    this.textInput.focus();
                }
            };
        }
    
        render() {
            // e就是input标签
            return (
                <div>
                    <input
                        type="text"
                        ref={(e)=>{this.textInput=e}}
                    />
                    <input
                        type="button"
                        value="Focus the text input"
                        onClick={this.focusTextInput}
                    />
                </div>
            );
        }
    }
    

    1.在锚点处创建并绑定对象

    <input type="text" ref={(e)=>{this.textInput=e}}/>
    

    使用箭头函数的方式,传入的参数e就是此处的DOM标签,那么this.textInput=input注意与上一种方式进行区分,那个是给.current赋值

    2.使用锚点

    constructor(props) {
        super(props);
        this.textInput = null;
        this.focusTextInput = () => {
            if (this.textInput){
                this.textInput.focus();
            }
        };
    }
    

    这里将箭头函数直接写在构造器中,用this.focusTextInput指向该箭头函数

    Refs转发

    // React.forwardRef()方法将ref实例作为其回调函数的第二个参数向下转发给底层DOM组件
    const TextInput = React.forwardRef((props, ref) => (
        // 此时inputRef.current=TextInput
        <input type="text" placeholder="请输入表名" ref={ref} />
    ));
    // 创建锚点
    const inputRef = React.createRef();
    class CustomTextInput extends React.Component {
        handleSave = () => {
            console.log(inputRef.current);
        };
    
        render() {
            return (
                <div>
                    {/* 将ref实例指定给组件TextInput,此时inputRef.current=TextInput */}
                    <TextInput ref={inputRef} />
                    <button onClick={this.handleSave}>保存</button>
                </div>
            );
        }
    }
    

    这是一个Refs转发的例子,过程如下:

    1.使用 React.createRef() 创建一个ref实例(inputRef);

    2.将ref实例指定给组件(TextInput)的ref属性 ;

    3.React.forwardRef()方法将ref实例作为其回调函数的第二个参数向下转发给底层DOM组件

    4.在外层组件中能够通过 current对象访问DOM节点值。

    打印的console.log(inputRef.current);

    React中Refs的几种用法

    说明转发成功,此时全局的inputRef实例(锚点)指向的是这个DOM元素


    现在将TextInput组件进行更换,不进行转发

    class TextInput extends React.Component{
        render(){
            return <input type="text" placeholder="请输入表名"/>
        }
    }
    

    打印出来,此时全局的inputRef实例(锚点)指向的是TextInput这个DOM元素

    React中Refs的几种用法


    起源地下载网 » React中Refs的几种用法

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元