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]

 

    

最新文章

  1. 使H1 H2等标签不换行
  2. git 远程仓库-github
  3. JavaScript 中一些概念理解 :clientX、clientY、offsetX、offsetY、screenX、screenY
  4. Scrapy002-框架安装
  5. Java设计模式 之 命令模式
  6. [翻译]opengl扩展教程2
  7. Android入门开发之SD卡读写操作(转)
  8. 启动运行下载gradle速度太慢,手动添加
  9. 使用python一步一步搭建微信公众平台(一)
  10. 20150203一些移动端H5小bug解决
  11. javascript实现数据结构与算法系列:线性表的静态单链表存储结构
  12. requirements.txt文件教程
  13. 什么是redis的雪崩和穿透
  14. CentOS 7.2编译安装PHP7
  15. 安装单机CHD5.12报错解决(补充)
  16. Visual Studio 代码补全功能有时候会失效的原因
  17. csv文件的读取
  18. mysql show variables
  19. Loadrunner上传文件与下载文件脚本
  20. linux环境下搭建osm_web服务器四(对万国语的地名进行翻译和检索):

热门文章

  1. jq实现上传头像并实时预览功能
  2. Spider_Man_4 の BeautifulSoup
  3. JavaScript实现职责链模式
  4. 解决eclipse出现This Android SDK requires Andro...date ADT to the latest version.问题
  5. 03 整合IDEA+Maven+SSM框架的高并发的商品秒杀项目之web层
  6. Windows 性能搜集【perfmon】
  7. sqlserver 字符串截取与拼接
  8. form表单action=&quot;&quot;的作用
  9. commons-logging的使用
  10. 网络编程之TCP编程