zoukankan      html  css  js  c++  java
  • React ref回调函数例子

    ref属性也可以是一个回调函数而不是一个名字。   这个函数将要在组件被挂载之后立即执行。

    这个参照的组件将会作为该函数的参数,这个函数可以立即使用这个组件参数,当然也可以将其保存供以后使用。

    当这个参照组件被卸载并且这个ref改变的时候,先前的ref的参数值将为null。这将有效的防止了内存的泄露。

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script src="react.js"></script>
    <script src="react-dom.js"></script>
    <script src="browser.min.js"></script>
    </head>
    <body>
    <div id="#root">

    </div>


    </body>
    <script type="text/babel">
    window.onload = function(){
    class Main extends React.Component{
    constructor(){
    super();
    this.textChange = this.textChange.bind(this);
    this.clearText = this.clearText.bind(this);
    this.state = {"con":"你好"}
    }
    textChange(e){
    this.setState({
    "con":e.target.value
    })
    }
    clearText(e){
    this.setState({
    "con":""
    })
    }
    render(){
    return(<div>
    <input type="text" value={this.state.con} onChange={this.textChange} ref={function(input){ alert(input);if(input!=null){input.focus()}}} />
    <input type="button" value="清空并获得焦点" onClick={this.clearText} />
    <input type="text" />
    </div>)
    }
    }
    ReactDOM.render(<Main/>,document.getElementById('#root'))
    }

    </script>
    </html>

    return(<div>
    <input type="text" value={this.state.con} onChange={this.textChange} ref={function(input){ alert(input);if(input!=null){input.focus()}}} />
    <input type="button" value="清空并获得焦点" onClick={this.clearText} />
    <input type="text" />
    </div>)

    第一次打开页面时会弹出[object HTMLInputElement];

       这个函数将要在组件被挂载之后立即执行。

    当点击按钮时则会弹出两个对话框

        一个为 null

        另一个为[object HTMLInputElement]

    为什么弹出两次呢?

    第一次因为ref回调函数会在ref改变时触发,且ref参数的值为null,所以弹出null

    第二次因为调用clearText函数改变state会重新渲染改变的组件,所以再次弹出[object HTMLInputElement]

     

        

  • 相关阅读:
    【Others】2048逻辑整理
    【MySQL】MySQL学习笔记(一)
    【PHP】对TP中session的理解
    【Python基础】python 作用域
    【phantomJs + selenium】动态cookie,数据采集记录
    [ZJOI2015][LOJ2137]诸神眷顾的幻想乡(广义SAM)
    [CF235C]Cyclical Quest(SAM)
    [BZOJ1426]收集邮票(概率期望dp)
    [HDU5421]Victor and String(PAM)
    [CF932G]Palindrome Partition(PAM回文划分dp)
  • 原文地址:https://www.cnblogs.com/qdcnbj/p/8391329.html
Copyright © 2011-2022 走看看