react查找DOM元素的方法
还是拿一个经典的react实例来说 可能都知道react中没有vue那样的数据双向绑定的效果
但我们可以通过其他的方式来实现
class App extends React.Component { constructor(){ super(); this.state={value:''} } render(){ return ( <div> <input type="text" id="d1" ref="d2" onChange={this.change.bind(this)} /> <div>{this.state.value}</div> </div> ) } change(e){ var div=document.getElementById('d1')//第一种方式: 通过原生的dom 操作获取对象 this.setState({value:div.value}) this.setState({value:this.refs.d2.value})//第二种方式: 通过 react 自己封装的refs 获取 this.setState({value:e.target.value}) // 第三种方式 通过 事件对象 获取 } } ReactDOM.render(<App />,document.getElementById('root'))
总结上面的三种情况就是
1、原生dom操作 ById ByClassName querySelector 等等
2、react 自带的 refs 方式 这个官方推荐使用 但不建议使用在事件源上面
refs多用于React组件内子组件的引用。使用ref获取DOM节点有两种情况:
(1)子组件为原生DOM组件:获取到的就是这个DOM节点。如下例,this.input就获取到了当前<input />节点。
<input ref={(ref)=>{this.myInput = ref}} />
通过this.myInput,我就可以对<input />进行一系列操作,比如让输入框聚焦:
this.myInput.focus();
注:refs也支持字符串格式:
<input ref='myInput' />
通过this.refs.myInput获取到节点。
(2)子组件为React组件,比如<MyInput/>:获得的就是<MyInput/>的实例,因此就可以调用<MyInput/>的实例方法。
示例:
componentDidMount(){ const myComp = this.refs.myComp; // 获取到的是<Comp />的实例myComp const dom = ReactDOM.findDOMNode(myComp); // 获取到实例对应的DOM节点 } render(){ return ( <div> <Comp ref='myComp' /> </div> ); }
注:调用<Comp />实例方法的方式:this.refs.myComp.method(),但并不建议这种调用方式。
3、事件对象 event 来获取,通常用于事件源 上面 上面的情况就推荐使用 这种方式
补:使用findDOMNode获取DOM元素
findDOMNode
findDOMNode通常用于React组件的引用,其语法如下:
import ReactDOM from 'react-dom'; ReactDOM.findDOMNode(ReactComponent);
当组件被渲染到DOM中后,findDOMNode会返回该组件实例对应的DOM节点。
示例:
componentDidMount(){ const dom = ReactDOM.findDOMNode(this); // this为当前组件的实例 } render() {}
注:如果render()中返回null,那么findDOMNode()也返回null。findDOMNode只对已经挂载的组件有效。
相关推荐:react教程
以上就是react怎么查找DOM元素?的详细内容,更多请关注易知道|edz.cc其它相关文章!