Rumah hujung hadapan web tutorial js 详细讲解React中的refs(详细教程)

详细讲解React中的refs(详细教程)

Jun 05, 2018 pm 05:53 PM
react refs

本篇文章主要介绍了React中的refs的使用教程,现在分享给大家,也给大家做个参考。

ref是React中的一种属性,当render函数返回某个组件的实例时,可以给render中的某个虚拟DOM节点添加一个ref属性,如下面的代码所示:

<body> 
  <script type="text/jsx"> 
    var App = React.createClass({ 
      render: function() { 
        return ( 
          <p> 
            <input type="text" placeholder="input something..." ref="input" /> 
          </p> 
        ); 
      } 
    }); 
    React.render( 
      <App />, 
      document.body 
    ); 
  </script> 
</body>
Salin selepas log masuk

在上面的代码中,render函数里仅仅返回了一个<p>标签,<p>里仅有一个<input>标签,在<input>标签的属性中,添加了一个ref属性,官方文档上对于ref属性的解释如下:

ref 属性

React 支持一种非常特殊的属性,你可以用来绑定到 render() 输出的任何组件上去。这个特殊的属性允许你引用 render() 返回的相应的支撑实例( backing instance )。这样就可以确保在任何时间总是拿到正确的实例。

给<input>标签设置ref属性有什么用途呢?下面是官方文档给出的解释:

在其它代码中(典型地事件处理代码),通过 this.refs 获取支撑实例( backing instance ),就像这样:this.refs.input。其中"input"就是上面给<input>标签设置的ref属性的值。

通过ref属性,我们还可以拿到该虚拟DOM对应的真实DOM节点,有两种方法可以拿到真实DOM节点,如下代码所示:

&lt;input type=&quot;text&quot; ref=&quot;username&quot; /&gt; 
//下面4种方式都可以通过ref获取真实DOM节点 
var usernameDOM = this.refs.username.getDOMNode(); 
var usernameDOM = React.findDOMNode(this.refs.username); 
var usernameDOM = this.refs[&#39;username&#39;].getDOMNode(); 
var usernameDOM = React.findDOMNode(this.refs[&#39;username&#39;]);
Salin selepas log masuk

下面通过一个demo来了解ref的使用:

demo在浏览器中运行的效果如下图:

在最上面的输入框中输入任意1-10的数字,即可让下面10个输入框中对应的输入框获取焦点,如上图,输入3后,下面第3个输入框马上获取焦点,这里就用到了ref属性,代码如下:

&lt;!DOCTYPE html&gt; 
&lt;html lang=&quot;en&quot;&gt; 
&lt;head&gt; 
  &lt;meta charset=&quot;UTF-8&quot;&gt; 
  &lt;title&gt;Refs&lt;/title&gt; 
  &lt;script type=&quot;text/javascript&quot; src=&quot;../react-0.13.0/build/react.js&quot;&gt;&lt;/script&gt; 
  &lt;script type=&quot;text/javascript&quot; src=&quot;../react-0.13.0/build/JSXTransformer.js&quot;&gt;&lt;/script&gt; 
&lt;/head&gt; 
&lt;body&gt; 
  &lt;script type=&quot;text/jsx&quot;&gt; 
    var App = React.createClass({ 
      handleChange: function(event) { 
        var index = event.target.value; 
        if(index &gt;= 1 &amp;&amp; index &lt;= 10) { 
          //找到对应的输入框并将焦点设置到里面 
          var refName = &quot;input&quot; + index; 
          //var inputDOM = React.findDOMNode(this.refs[refName]); 
          var inputDOM = this.refs[refName].getDOMNode(); 
          inputDOM.focus(); 
        } 
      }, 
      render: function() { 
        var inputs = []; 
        for(var i = 1; i &lt;= 10; i++) { 
          inputs.push(&lt;p&gt;&lt;li&gt;&lt;input type=&quot;text&quot; ref={&quot;input&quot; + i}/&gt;&lt;/li&gt;&lt;br/&gt;&lt;/p&gt;); 
        } 
        return ( 
          &lt;p&gt; 
            &lt;label htmlFor=&quot;input&quot; &gt;在这里输入下面任意输入框的索引,光标会自动定位到输入框内:&lt;/label&gt; 
            &lt;input type=&quot;text&quot; id=&quot;input&quot; onChange={this.handleChange} /&gt; 
            &lt;hr /&gt; 
            &lt;ol&gt; 
              {inputs} 
            &lt;/ol&gt; 
          &lt;/p&gt; 
        ) 
      } 
    }); 
    React.render( 
      &lt;App /&gt;, 
      document.body 
    ); 
  &lt;/script&gt; 
&lt;/body&gt; 
&lt;/html&gt;
Salin selepas log masuk

在render函数中,为html文档的body部分添加了10个输入框,每个输入框的ref属性都设置成了["index" + 索引]的这种方式,然后在最上面的输入框的handleChange函数中,获取输入的数字,并得到ref属性的值,最后根据ref属性的值,找到对应的真实DOM节点,然后让该DOM节点获取焦点。

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

js经验分享 JavaScript反调试技巧

利用node.js对webpack打包

在webpack中如何使用external模块

Atas ialah kandungan terperinci 详细讲解React中的refs(详细教程). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Cara membina apl sembang masa nyata dengan React dan WebSocket Cara membina apl sembang masa nyata dengan React dan WebSocket Sep 26, 2023 pm 07:46 PM

Cara membina apl sembang masa nyata dengan React dan WebSocket

Panduan untuk Bertindak balas pemisahan bahagian hadapan dan belakang: Cara mencapai penyahgandingan dan penggunaan bebas bagi bahagian hadapan dan belakang Panduan untuk Bertindak balas pemisahan bahagian hadapan dan belakang: Cara mencapai penyahgandingan dan penggunaan bebas bagi bahagian hadapan dan belakang Sep 28, 2023 am 10:48 AM

Panduan untuk Bertindak balas pemisahan bahagian hadapan dan belakang: Cara mencapai penyahgandingan dan penggunaan bebas bagi bahagian hadapan dan belakang

Cara membina aplikasi web yang ringkas dan mudah digunakan dengan React dan Flask Cara membina aplikasi web yang ringkas dan mudah digunakan dengan React dan Flask Sep 27, 2023 am 11:09 AM

Cara membina aplikasi web yang ringkas dan mudah digunakan dengan React dan Flask

Cara membina aplikasi analisis data pantas menggunakan React dan Google BigQuery Cara membina aplikasi analisis data pantas menggunakan React dan Google BigQuery Sep 26, 2023 pm 06:12 PM

Cara membina aplikasi analisis data pantas menggunakan React dan Google BigQuery

Cara membina aplikasi pemesejan yang boleh dipercayai dengan React dan RabbitMQ Cara membina aplikasi pemesejan yang boleh dipercayai dengan React dan RabbitMQ Sep 28, 2023 pm 08:24 PM

Cara membina aplikasi pemesejan yang boleh dipercayai dengan React dan RabbitMQ

Panduan penyahpepijatan kod tindak balas: Cara mencari dan menyelesaikan pepijat bahagian hadapan dengan cepat Panduan penyahpepijatan kod tindak balas: Cara mencari dan menyelesaikan pepijat bahagian hadapan dengan cepat Sep 26, 2023 pm 02:25 PM

Panduan penyahpepijatan kod tindak balas: Cara mencari dan menyelesaikan pepijat bahagian hadapan dengan cepat

Panduan reka bentuk responsif bertindak balas: Cara mencapai kesan susun atur bahagian hadapan yang adaptif Panduan reka bentuk responsif bertindak balas: Cara mencapai kesan susun atur bahagian hadapan yang adaptif Sep 26, 2023 am 11:34 AM

Panduan reka bentuk responsif bertindak balas: Cara mencapai kesan susun atur bahagian hadapan yang adaptif

Cara membungkus dan menggunakan aplikasi bahagian hadapan menggunakan React dan Docker Cara membungkus dan menggunakan aplikasi bahagian hadapan menggunakan React dan Docker Sep 26, 2023 pm 03:14 PM

Cara membungkus dan menggunakan aplikasi bahagian hadapan menggunakan React dan Docker

See all articles