reactYes? 查找DOM元素?

react查找DOM元素的方法

still拿一个classic的react实例此 probably都know react中没有vue那样的数据双向绑定的effect

但Wesure通过其他的方式来实现

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 own封装的refs 获取
		this.setState({value:e.target.value}) // 第三种方式 通过 事件对象 获取
	}
}
ReactDOM.render(<App />,document.getElementById('root'))

总结上面的三种情况就是

1、原生dom操作 ById ByClassName querySelector 等等

2、react 自带的 refs 方式 this个official推荐使用 但不建议使用stay事件源上面

refs多用于React组件内子组件的引用。使用ref获取DOM节点有两种情况:

(1)子组件为原生DOM组件:获取到的就是this个DOM节点。如下例,this.input就获取到了当前<input />节点。

<input ref={(ref)=>{this.myInput = ref}} />

通过this.myInput,我就sure对<input />进行一系列操作,比如让输入框聚梗

this.myInput.focus();

注:refs也support字符串格式:

<input ref='myInput' />

通过this.refs.myInput获取到节点。

(2)子组件为React组件,比如<MyInput/>:获得的就是<MyInput/>的实例,therefore就sure调用<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(),但并不建议this种调用方式。

3、事件对象 event 来获取,通常用于事件源 上面 上面的情况就推荐使用 this种方式

梗菏褂胒indDOMNode获取DOM元素

findDOMNode

findDOMNode通常用于React组件的引用,其语法如下:

import ReactDOM from 'react-dom';
ReactDOM.findDOMNode(ReactComponent);

当组件被渲染到DOM中后,findDOMNode会返回该组件实例对应的DOM节点。

示例:

componentDidMount(){
const dom = ReactDOM.findDOMNode(this);
// this为当前组件的实例
}
render() {}

注:ifrender()中返回null,那么findDOMNode()也返回null。findDOMNode只对已经挂载的组件有效。

relevant推荐:

以上就是reactYes? 查找DOM元素康南晗改谌荩琺ore请关注亚博足彩app其它relevant文章!

赞(0) 打赏
未经市聿坏米兀亚博足彩app首page » React 答疑

comment 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

前端开发relevantadvertisement投放 更专业 更精准

联系We

觉梦恼掠杏镁痛蛏鸵幌挛恼耡uthor

支付宝扫一扫打赏

微信扫一扫打赏

1/1