当前位置: 代码迷 >> 综合 >> React与DOM
  详细解决方案

React与DOM

热度:85   发布时间:2024-01-28 11:40:51.0

React将React涉及DOM操作的部分剥离开,目的是为了抽象React,同时使用于Web端和移动端。ReactDOM的关注点在DOM上,因此只适用于Web端。

在React组件的开发实现中,我们并不会用到ReactDOM,只有在顶层组件以及由于React模型所限而不得不操作DOM的时候,才会使用它。

1.ReactDOM

ReactDOM中的API非常少,只有findDOMNode,unmountComponentAtNode和render.

1.findDOMNode

React提供的可以获取DOM的方法之一就是findDOMNode,当组件被渲染到DOM中后,findDOMNode返回该React组件实例相应的DOM节点。它可以用于获取表单的value以及用于DOM的测量。例如,假设要在当前组件加载完时获取当前DOM,则可以使用findDOMNode:

import React,{ Component } from 'React';
import ReactDOM from 'react-dom';class App extends Component {componentDidMount() {const dom = ReactDOM.findDOMNode(this);}render() {}
}

如果在render中返回null,那么findDOMNode也返回null.findDOMNode只对已经挂载的组件有效。

2.render

为什么说只有在顶层组件我们才不得不使用ReactDOM呢,这是因为要把React渲染的VirtualDOM渲染到浏览器的DOM当中,就要使用render方法了。

ReactComponent render() {ReactElement element,DOMElement container,[function callback]
}

该方法把元素挂载到container中,并且返回element的实例(即refs引用)。当然,如果时无状态组件,render会返回null.当组件装载完毕时,callback就会被调用

当组件在初次渲染之后再次更新时,React不会把整个组件重新渲染一次,而会用它高效的DOM diff算法做局部的更新。

2.ReactDOM的不稳定方法

ReactDOM中有两个不稳定方法,其中一个方法与render方法颇为相似,unstable_renderSubtreeIntoContainer.它的作用很简单,就是更新组件到传入的DOM节点上,它和render的区别在于是否传入父节点。

3.refs

刚才我们已经详述了ReactDOM的render方法,比如我们渲染了一个App组件到root节点

const myAppInstance = ReactDOM.render(<App />, document.getElementById('root'));

refs是React组件中非常特殊的prop,可以附加到任何一个组件上。从字面意思来看,refs即reference,组件被调用时会创建一个该组件的实例,而refs就会指向这个实例。

import React,{ Component } from 'React';class App extends Component {constructor(props) {super(props);this.handleClick = this.handleClick.bind(this);    }handleClick() {if(this.myTextInput !== null){this.myTextInput.focus();}    }render() {return (<div><input type="text" ref={(ref) => this.myTextInput = ref} /><input type="button" value="Focus the text input" onClick={this.handleClick} /></div>);}
}

refs同样支持字符串。对于DOM操作,不仅可以使用findModule获得该组件DOM,还可以使用refs获得组件内部的DOM。

import React, { componnet } from 'React';
import ReactDOM from 'react-dom';class App extends Componnet {componentDidMount() {const myComp = this.refs.myComp;const dom = React.findDOMNode(myComp);  }render() {return (<div><Comp ref="myComp" /></div>);}
}

要获取一个React组件的引用,既可以使用this来获取当前的React组件,也可以使用refs来获取你拥有的子组件的引用

  相关解决方案