6-refs 拿到真实的 dom 元素

以前的方式:

在元素上给一个ref的属性,值是字符串,如 :ref="d1"
访问这个真是的dom元素 : this.refs.d1

现在推荐的方式,回调

在元素上给一个ref属性,值是回调函数,会把当前dom元素当参数传到回调函数里面。
过程解析:这个节点被渲染的时候,这个回调函数会被调用,会传递一个参数:这个真实的DOM元素,你就可以做任何事情。

ref={elt=>{this.d1=elt}} //将这个DOM挂载到组件实例上
this.d1 //访问这个真实的DOM元素

在父组件上拿到子组件ref

class Sub extends Component{
    constructor(props){
        super(props)
    }
    render(){
        let {d1} = this.props
        return (
            <div>
                <div ref={d1}>子组件的div</div>
            </div>
        )
    }
}

export default class Refs extends Component{
    constructor(props){
        super(props)
    }       
    getChildDom=()=>{
        console.log(this.d1)
    }
    render(){
        return (
            <div>
                <Sub d1={elt=>{this.d1=elt}}></Sub>
                <div
                
                >会被拿到</div>
                <button onClick={this.getChildDom}>getChildDom</button>
            </div>
        )
    }
}

记住一个原则:能不用 ref 就不用。特别是要避免用 ref 来做 React.js 本来就可以帮助你做到的页面自动更新的操作和事件监听。多余的 DOM 操作其实是代码里面的“噪音”,不利于我们理解和维护。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • refs提供了可以在render方法中访问dom节点和创建的react元素的方法。 为了良好的阅读体验,请查看gi...
    mytac阅读 438评论 0 1
  • 深入JSX date:20170412笔记原文其实JSX是React.createElement(componen...
    gaoer1938阅读 8,102评论 2 35
  • 这篇笔记主要包含 Vue 2 不同于 Vue 1 或者特有的内容,还有我对于 Vue 1.0 印象不深的内容。关于...
    云之外阅读 5,074评论 0 29
  • 今天突然意识到 原来每天都能完成一些事情 是件多么幸福的事 该买的书已经到了,该考的试已经考了,改找的人已经找了,...
    王牌飞行员阅读 216评论 1 1
  • 2018年3月19日,周一,我和胖哥的大喜之日。 婚期渐进,时不时有人来问我这个新娘子有没有很紧张激动,最后询问的...
    我爱jiang牛肉阅读 349评论 1 2