React中获取DOM节点的两种方法(了解就行)

React提供的获取DOM元素的方法有两种,一是react-dom中的findDOMNode(),二是refs。

1、findDOMNode

findDOMNode通常用于React组件的引用,其语法如下:

 

import ReactDOM from 'react-dom';
ReactDOM.findDOMNode(ReactComponent);

当组件被渲染到DOM中后,findDOMNode会返回该组件实例对应的DOM节点。

示例:

 

componentDidMount(){
    const dom = ReactDOM.findDOMNode(this);
    // this为当前组件的实例
}

render() {}

注:如果render()中返回null,那么findDOMNode()也返回null。findDOMNode只对已经挂载的组件有效。

2、refs

refs多用于React组件内子组件的引用。使用ref获取DOM节点有两种情况:

(1)子组件为原生DOM组件:获取到的就是这个DOM节点。如下例,this.input就获取到了当前<input />节点。

      此处是使用refs回调来实现的,新版本的react已经通过 this.ref = React.createRef();      ref={this.ref}  实现  

 

<input ref={(ref)=>{this.myInput = ref}} />

通过this.myInput,我就可以对<input />进行一系列操作,比如让输入框聚焦:

 

this.myInput.focus();

注:refs也支持字符串格式:(会出现其它错误情况,不建议使用)

 

<input ref='myInput' />

通过this.refs.myInput获取到节点。

(2)子组件为React组件,比如<MyInput/>:获得的就是<MyInput/>的实例,因此就可以调用<MyInput/>的实例方法。
示例:

 

componentDidMount(){
    const myComp = this.refs.myComp;  // 获取到的是<Comp />的实例myComp
    const dom = ReactDOM.findDOMNode(myComp);  // 获取到实例对应的DOM节点
}

render(){
    return (
        <div>
            <Comp ref='myComp' />
        </div>
    );
}

注:调用<Comp />实例方法的方式:this.refs.myComp.method(),但并不建议这种调用方式。



作者:南风知我意ZD
链接:https://www.jianshu.com/p/f533a9d7645c
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值