react的ref属性

作者: 转移到CSDN名字丹丹的小跟班 | 来源:发表于2021-03-14 10:37 被阅读0次
ref在react里面总共有3种写法:字符串形式,回调函数形式,createRef。

1.字符串形式(该形式已经被react官方抛弃,官方说将来可能会弃用。但是现在依旧可以使用,不过不推荐)

class Demo extends React.Component {
  render() {
    return (
      <div>
        <button ref='btn' onClick={this.showDate}>打印节点</button>
      </div>
    );
  }
  showDate = () => {
    console.log(this.refs.btn)
  }
}
打印结果

2.1.内联回调函数写法

class Demo extends React.Component {
  render() {
    return (
      <div>
        <button ref={(c) => {console.log(c); this.btn = c}} onClick={this.showDate}>打印节点</button>
      </div>
    );
  }
  showDate = () => {
    console.log(this.btn)
  }
}
打印结果

ref的回调函数完整写法为(currentNode)=> { this.inp1 = currentNode },该回调函数的参数表示当前节点,也就是我们需要操作的元素节点。回调函数里面的this指的是当前类的实例。将此节点绑定到实例的属性上,需要用时直接使用this.属性就可直接调用。(ref的回调函数为react自动调用。)

class Demo extends React.Component {
  state = {num: 0}
  render() {
    return (
      <div>
        <button ref={(c) => {console.log(c); this.btn = c}} onClick={this.showDate}>打印节点</button>
      </div>
    );
  }
  showDate = () => {
    this.setState({num: this.state.num + 1})
  }
}
打印结果.png

注意:如果 ref 回调函数是以内联函数的方式定义的,在更新过程中它会被执行两次,第一次传入参数 null,然后第二次会传入参数 DOM 元素。\color{green}{\small这是因为在每次渲染时会创建一个新的函数实例,所以 React 清空旧的 ref 并且设置新的。}通过将 ref 的回调函数定义成 class 的绑定函数的方式可以避免上述问题,但是大多数情况下它是无关紧要的。

2.2. 非内联回调函数

class Demo extends React.Component {
  state = {num: 1}
  render() {
    return (
      <div>
        <button ref={this.REF_inp} onClick={this.showDate}>打印节点</button>
      </div>
    );
  }
  showDate = () => {
    this.setState({num: this.state.num + 1})
  }

  REF_inp = (c) => {
    this.inp1 = c;
     console.log(c)
  }
}

只会打印一次节点,不会随render函数更新


打印结果

3.React.createRef()

class Demo extends React.Component {
  Ref_box = React.createRef()
  render() {
    return (
      <div>
        <button ref={this.Ref_box} onClick={this.showDate}>打印节点</button>
      </div>
    );
  }
  showDate = () => {
    console.log(this.Ref_box.current)
  }
}
打印结果

React.createRef()会返回一个容器,该容器可以存储被ref所标识的节点。但是该容器是“专人专用”,只会存储一个节点。若只有一个容器而有多个ref绑定的节点,后一个会覆盖前一个节点。所以想要存储多个节点,只能创建多个React.createRef()容器。

相关文章

  • React ref属性

    一、用途 ref属性允许我们使用react操作真实DOM 二、用法 ref属性的值是一个箭头函数,参数接收真实的D...

  • React获取DOM

    React获取DOM的方法简述 createRef 当 ref 属性在组件时,获取组件实例;当ref属性在dom时...

  • React.createRef 和 React.forwardR

    React.createRef React.createRef 创建一个能够通过 ref 属性附加到 React ...

  • react的ref属性

    ref在react里面总共有3种写法:字符串形式,回调函数形式,createRef。 1.字符串形式(该形式已经被...

  • React 可控不可控组件

    拿到组件的节点 通过ref属性,然后调用React.findDOMNode("ref_name"); 可控组件如果...

  • React ref属性使用

    React Refs React 支持一种非常特殊的属性 Ref ,你可以用来绑定到 render() 输出的任何...

  • react的ref属性使用:

  • ReactJS_13 React Refs、this.props

    React Refs React 支持一种非常特殊的属性 Ref ,你可以用来绑定到 render() 输出的任何...

  • react-ref

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

  • React中ref的使用

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

网友评论

    本文标题:react的ref属性

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