React学习(七)获取真实的DOM节点
来源:互联网 发布:全志科技 知乎 编辑:程序博客网 时间:2024/06/05 03:01
组件并不是真实的 DOM 节点,而是存在于内存之中的一种数据结构,叫做虚拟 DOM (virtual DOM)。只有当它插入文档以后,才会变成真实的 DOM 。根据 React 的设计,所有的 DOM 变动,都先在虚拟 DOM 上发生,然后再将实际发生变动的部分,反映在真实 DOM上,这种算法叫做 DOM diff ,它可以极大提高网页的性能表现。
需要注意的是,由于 this.refs.[refName] 属性获取的是真实 DOM ,所以必须等到虚拟 DOM 插入文档以后,才能使用这个属性,否则会报错。上面代码中,通过为组件指定 Click 事件的回调函数,确保了只有等到真实 DOM 发生 Click 事件之后,才会读取 this.refs.[refName] 属性。
React 组件支持很多事件,除了 Click 事件以外,还有 KeyDown 、Copy、Scroll 等,完整的事件清单请查看官方文档。
但是,有时需要从组件获取真实 DOM 的节点,这时就要用到 ref 属性
<html> <head> <meta charset="UTF-8" /> <title>Hello React!</title> <script src="D:/ReactDom/build/react.min.js"></script> <script src="D:/ReactDom/build/react-dom.min.js"></script> <script src="D:/ReactDom/build/browser.min.js"></script> </head> <body> <div id="example"></div> <script type="text/babel">var MyComponent = React.createClass({ handleClick: function() { this.refs.myTextInput.focus(); }, render: function() { return ( <div> <input type="text" ref="myTextInput" /> <input type="button" value="Focus the text input" onClick={this.handleClick} /> </div> ); }});ReactDOM.render( <MyComponent />, document.getElementById('example')); </script> </body></html>上面代码中,组件 MyComponent 的子节点有一个文本输入框,用于获取用户的输入。这时就必须获取真实的 DOM 节点,虚拟 DOM 是拿不到用户输入的。为了做到这一点,文本输入框必须有一个 ref 属性,然后 this.refs.[refName] 就会返回这个真实的 DOM 节点。
需要注意的是,由于 this.refs.[refName] 属性获取的是真实 DOM ,所以必须等到虚拟 DOM 插入文档以后,才能使用这个属性,否则会报错。上面代码中,通过为组件指定 Click 事件的回调函数,确保了只有等到真实 DOM 发生 Click 事件之后,才会读取 this.refs.[refName] 属性。
React 组件支持很多事件,除了 Click 事件以外,还有 KeyDown 、Copy、Scroll 等,完整的事件清单请查看官方文档。
阅读全文
1 0
- React学习(七)获取真实的DOM节点
- React 获取真实的DOM节点
- react教程之获取真实的DOM节点
- React获取DOM节点
- DOM(HTML中节点的获取)
- DOM节点信息的获取
- React入门03-react中操作组件的dom节点
- ref属性用于获取真实的节点
- DOM获取节点的兄弟,父节点,子节点
- 轻松学习JavaScript二十一:DOM编程学习之获取元素节点的子节点和属性节点
- DOM(包括获取元素节点的方法以及获取和设置元素节点的属性)
- js的DOM(文档对象模型)获取节点
- React获取DOM方法
- HTML DOM节点的属性获取
- jQuery获取循环出来的DOM节点
- 获取DOM节点的所有方法
- javascript获取dom的下一个节点方法
- JS的DOM(一)获取节点
- 时间调度的架构
- 掌握flash的as3图形学Stage3d的屏幕坐标和纹理UV采样坐标
- SPOJ Fast Maximum Matching(二分图最大匹配Hopcroft-Carp)
- 终端提交代码到码云
- 【刷题】从1到n整数中1出现的次数
- React学习(七)获取真实的DOM节点
- (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escap
- 选择器总结
- Linux设备驱动模型与kobject的关系
- RNN学习笔记以及LSTM详解
- XL6009 DC-DC升压模块
- 汉诺塔[递归]
- mybatis 缓存(二) 二级缓存
- listview点击条目进行跳转,把position和具体的实体进行对应