node搜索html元素,react怎么查找DOM元素?

c93696f74886b260bf7eef897c19f174.png

react查找DOM元素的方法

还是拿一个经典的react实例来说 可能都知道react中没有vue那样的数据双向绑定的效果

但我们可以通过其他的方式来实现class App extends React.Component {

constructor(){

super();

this.state={value:''}

}

render(){

return (

{this.state.value}

)

}

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(,document.getElementById('root'))

总结上面的三种情况就是

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

2、react 自带的 refs 方式 这个官方推荐使用 但不建议使用在事件源上面

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

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

通过this.myInput,我就可以对进行一系列操作,比如让输入框聚焦:this.myInput.focus();

注:refs也支持字符串格式:

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

(2)子组件为React组件,比如:获得的就是的实例,因此就可以调用的实例方法。

示例:componentDidMount(){

const myComp = this.refs.myComp; // 获取到的是的实例myComp

const dom = ReactDOM.findDOMNode(myComp); // 获取到实例对应的DOM节点

}

render(){

return (

);

}

注:调用实例方法的方式: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只对已经挂载的组件有效。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值