react怎么获取dom元素? - 网站

react怎么获取dom元素?

分类:React入门教程_React框架基础教程 · 发布时间:2020-11-22 23:04 · 阅读:1562

React提供的获取DOM元素的方法有两种,一是react-dom中的findDOMNode(),二是refs。

1、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只对已经挂载的组件有效。

2、refs

React 支持一种非常特殊的属性 Ref ,你可以用来绑定到 render() 输出的任何组件上。

这个特殊的属性允许你引用 render() 返回的相应的支撑实例( backing instance )。这样就可以确保在任何时间总是拿到正确的实例。

在正常的 react 数据流中,props 是父组件与子元素交互的唯一渠道。如果想要修改子元素,你需要通过一个新的 props 进行重新渲染。但是,在一些情境下,你需要在正常数据流外强行修改子元素,这时,你就需要用到 refs。修改的子元素可以是react组件的实例,也可以是DOM元素。

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 (
        <p>
            <Comp ref='myComp' />
        </p>
    );
}

注:调用<Comp />实例方法的方式:this.refs.myComp.method(),但并不建议这种调用方式。

标签:
react dom元素

相关文章

react中怎么使用sass?

方法:1、使用npm工具安装sass-loader和node-sass依赖;2、配置webpack.config.js文件;3、在需要的组件中引入scss,然后添加scss代码即可。

react怎么判断checkbox是否被选中

react判断checkbox是否被选中的方法:可以通过【if ($(&quot;#checkbox-id&quot;).get(0).checked) {}】方法来进行判断。还可以通过原生js方法来进行判断,如【ele.checked】。

react子组件如何向父组件传值?

在react中,首先通过父组件给子组件传递一个函数,然后子组件通过参数传到父组件,通过props来传递函数的引用,并通过回调的方式实现;其实就是子组件调用父组件的方法,把值以形参的方式传出来。

react组件什么时候会重新渲染?

每当组件状态改变时,React就会调用render函数进行重新渲染。更改状态意味着当调用setState函数时,React触发更新;这不仅意味着将调用组件的render函数,而且还意味着重新渲染其所有后续子组件,无论其prop是否已更改。

react组件生命周期有几个阶段?

React组件生命周期有三个阶段:加载、更新和卸载。加载阶段表示一个组件实例被创建并被插入到DOM中;更新阶段表示由状态或属性的改变导致组件的重新渲染;卸载阶段表示组件从DOM中移除。

返回分类 返回首页