“React中的DOM操纵”笔记

React中的每个组件都是一个状况机,通常状况下,我们经由过程设置组件的状况就能够完成UI的更新,然则在某些状况下确切须要直接操纵DOM。

React中操纵DOM的要领:

  • Refs
  • findDOMNode()

findDOMNode()

当组件加载到页面上以后(mounted),你就能够经由过程 getDOMNode() 要领拿到组件对应的 DOM 元素。

React.findDOMNode()只在mounted组件中挪用,mounted组件就是已渲染在浏览器DOM构造中的组件。假如你在组件的render()要领中挪用React.findDOMNode()就会抛出非常。

Refs

经由过程在要援用的 DOM 元素上面设置一个 ref 属性指定一个称号,然后经由过程 this.refs.name 来访问对应的 DOM 元素。

比方有一种状况是必需直接操纵 DOM 来完成的,你愿望一个 <input/>元素在你清空它的值时 focus,你没法仅仅靠 state 来完成这个功用。

class App extends Component {
  constructor() {
    return { userInput: '' };
  }

  handleChange(e) {
    this.setState({ userInput: e.target.value });
  }

  clearAndFocusInput() {
    this.setState({ userInput: '' }, () => {
      this.refs.theInput.focus();
    });
  }

  render() {
    return (
      <div>
        <div onClick={this.clearAndFocusInput.bind(this)}>
          Click to Focus and Reset
        </div>
        <input
          ref="theInput"
          value={this.state.userInput}
          onChange={this.handleChange.bind(this)}
        />
      </div>
    );
  }
}

假如ref 是设置在原生 HTML 元素上,它拿到的就是 DOM 元素,假如设置在自定义组件上,它拿到的就是组件实例,这时刻就须要经由过程 findDOMNode来拿到组件的 DOM 元素。

由于无状况组件没有实例,所以
ref 不能设置在无状况组件上,一般来说这没什么题目,由于无状况组件没有实例要领,不须要
ref 去拿实例挪用相干的要领,然则假如想要拿无状况组件的
DOM 元素的时刻,就须要用一个状况组件封装一层,然后经由过程
ref
findDOMNode 去猎取。

    原文作者:Gideon
    原文地址: https://segmentfault.com/a/1190000005863625
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞