React之ref

作者: BubbleM | 来源:发表于2018-01-13 17:50 被阅读7935次

React提供的这个ref属性,表示为对组件真正实例的引用,其实就是ReactDOM.render()返回的组件实例;

  • ReactDOM.render()渲染组件时返回的是组件实例;
  • 渲染dom元素时,返回是具体的dom节点。

ref可以挂载到组件上也可以是dom元素上;

  • 挂到组件(class声明的组件)上的ref表示对组件实例的引用。不能在函数式组件上使用 ref 属性,因为它们没有实例:
  • 挂载到dom元素上时表示具体的dom元素节点。

Q:ref属性可以设置为一个回调函数
React 支持给任意组件添加特殊属性。ref 属性接受一个回调函数,它在组件被加载或卸载时会立即执行。

  • 当给 HTML 元素添加 ref 属性时,ref 回调接收了底层的 DOM 元素作为参数。
  • 当给组件添加 ref 属性时,ref 回调接收当前组件实例作为参数。
  • 当组件卸载的时候,会传入null
  • ref 回调会在componentDidMount 或 componentDidUpdate 这些生命周期回调之前执行。

Q:当给组件、H5标签添加 ref 属性后,此实例只能在当前组件中被访问到,父组件的 refs 中是没有此引用的,例如:

var Parent = React.createClass({
  render: function(){
    return (
      <div className = 'parent'>
        <Child ref = 'child'/>
      </div>
    )
  },
  componentDidMount(){
    console.log(this.refs.child); // 访问挂载在组件上ref
    console.log(this.refs.child.refs.update); // 访问挂载在dom元素上的ref
  }
})

var Child = React.createClass({
  render: function() {
    return (
        <div ref="test">
          <a ref="update">更新</a>
        </div>
    );
  }
});
ReactDOM.render(
  <Parent/>,
  document.getElementById('example')
);
image.png
  • 给 h5 元素设置 ref <a ref="update">更新</a>后,可以拿到它的真实 dom<a>更新</a>
  • 给组件设置ref<Child ref = 'child'/>后,拿到的是组件的实例(上图中的Constructor)

Q:获取ref引用组件对应的dom节点
不管ref设置值是回调函数还是字符串,都可以通过ReactDOM.findDOMNode(ref)来获取组件挂载后真正的dom节点。


image.png
image.png

但是对于html元素使用ref的情况,ref本身引用的就是该元素的实际dom节点,无需使用ReactDOM.findDOMNode(ref)来获取,该方法常用于React组件上的ref。

Q:this.refsReactDOM.findDOMNode的区别

  • ref添加到Compoennt上获取的是Compoennt实例,添加到原生HTML上获取的是DOM;
  • ReactDOM.findDOMNode,当参数是DOM,返回值就是该DOM;当参数是Component获取的是该Component render方法中的DOM
  • 二者主要区别在ref绑定在组件上的时候,this.refs获取到的是组件实例,ReactDOM.findDOMNode获取到的是dom节点。

Q:新版本的React已经不推荐我们使用ref string转而使用ref callback

<Child ref={child => this._child = child}/>
console.log(ReactDOM.findDOMNode(this._child))

相关文章

  • react-ref

    ref:react对真实dom的引用 ref在reactElement上 ref在react组件上

  • React中ref的使用

    React中Ref是什么? ref是React提供的用来操纵React组件实例或者DOM元素的接口。 ref的作用...

  • React之ref

    React提供的这个ref属性,表示为对组件真正实例的引用,其实就是ReactDOM.render()返回的组件实...

  • react 之 ref

    React的ref有3种用法: 字符串(已废弃) 回调函数 React.createRef() (React16....

  • react 之 ref

    Refs 可以直接访问 dom 节点或者 react 组件。 在传统的 react 数据流中,父组件与子组件的数据...

  • 如何使用React Refs

    如何在React中利用ref以及ref转发,回调ref和HOC React Ref是有用的功能,可作为从父组件中引...

  • React学习笔记(三)

    React中的 ref 的使用 ref是一个引用,在React中使用ref来直接获取DOM元素从而操作DOM Re...

  • React 中 ref 的使用

    ref是reference的简写,它是一个引用,在react中,我们使用ref来操作DOM。 在react中,我们...

  • React 中的转发ref

    在 React V16.3� 中react引入了: React.forward((props, ref) => R...

  • React refs

    1.React.createRef() React.createRef可以给Dom元素添加ref。React.cr...

网友评论

    本文标题:React之ref

    本文链接:https://www.haomeiwen.com/subject/wkmcoxtx.html