zoukankan      html  css  js  c++  java
  • React Refs

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

    这个特殊的属性允许你引用 render() 返回的相应的支撑实例( backing instance )。这样就可以确保在任何时间总是拿到正确的实例。

    使用方法

    绑定一个 ref 属性到 render 的返回值上:

    <input ref="myInput" />

    在其它代码中,通过 this.refs 获取支撑实例:

    var input = this.refs.myInput;
    var inputValue = input.value;
    var inputRect = input.getBoundingClientRect();

    完整实例

    你可以通过使用 this 来获取当前 React 组件,或使用 ref 来获取组件的引用,实例如下:

    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="UTF-8" />
        <title>refs</title>
        <script src="https://cdn.bootcss.com/react/15.4.2/react.min.js"></script>
        <script src="https://cdn.bootcss.com/react/15.4.2/react-dom.min.js"></script>
        <script src="https://cdn.bootcss.com/babel-standalone/6.22.1/babel.min.js"></script>
      </head>
      <body>
        <div id="example"></div>
        <script type="text/babel">
          // 创建 MyComponent 组件
          var MyComponent = React.createClass({
            // 按钮点击事件
            handleClick: function() {
              // 使用原生的 DOM API 获取焦点
              this.refs.myInput.focus();
            },
            // 渲染
            render: function() {
              // 当组件插入到DOM后,ref属性添加一个组件的引用于到this.refs
              return (
                <div>
                  <input type="text" ref="myInput" />
                  <input
                    type="button"
                    value="点我输入框获取焦点"
                    onClick={this.handleClick}
                  />
                </div>
              );
            }
          });
    
          // 创建虚拟DOM
          ReactDOM.render(
            <MyComponent />,
            document.getElementById('example')
          );
        </script>
      </body>
    </html>

    实例中,我们获取了输入框的支撑实例的引用,子点击按钮后输入框获取焦点。

    我们也可以使用 getDOMNode()方法获取DOM元素

    效果图:

    .

  • 相关阅读:
    C# Yield的使用
    vs code使用Markdown编辑使用插件
    理解IEnumerable和IQueryable
    LINQ使用CopyToDataTable
    Predicate委托
    Func委托
    Action委托
    Delegate委托
    TypeError: Cannot read property 'thisCompilation' of undefined
    由于找不到vcruntime140.dll,无法继续执行代码。
  • 原文地址:https://www.cnblogs.com/crazycode2/p/8452084.html
Copyright © 2011-2022 走看看