React 0.13 this.getDOMNode() 相当于 React.findDOMNode()

React 0.13 this.getDOMNode() equivalent to React.findDOMNode()

这在 React 版本 0.12 中工作得很好:

componentDidMount: function () {
    var dom = this.getDOMNode();
}

变量dom 获取渲染组件的实际DOM 节点。然而,将其转换为 React 0.13 并没有像预期的那样工作:

componentDidMount: function () {
    var dom = React.findDOMNode();
    // dom is undefined
}

我试过 React.findDOMNode(this) 也不管用。基本上我只是试图在不使用 ref 的情况下获取由渲染函数渲染的顶级 dom 节点。这可能吗?

更新 React v0.14+

在 React v0.14+ this has changed, you should now use the react-dom 模块中:

import ReactDOM from 'react-dom';

ReactDOM.findDOMNode(this);

ES6

class Test extends React.Component {
  componentDidMount() {
    const element = ReactDOM.findDOMNode(this);
    console.log(element);
    alert(element);
  }
  
  render() {
    return (
      <div>test</div>
    );
  }
}

ReactDOM.render(<Test />, document.getElementById('r'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.js"></script>
<div id="r" />

ES5

var Test = React.createClass({
  componentDidMount: function() {
    var dom = ReactDOM.findDOMNode(this);
    console.log(dom);
    alert(dom);
  },
  render: function() {
    return React.createElement('div', null, 'test');
  }
});

ReactDOM.render(React.createElement(Test), document.getElementById('r'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.js"></script>
<div id="r" />


React v0.13 及以下版本

将其作为参数传递肯定有效:

React.findDOMNode(this);

如果不是,则可能发生了其他事情。请参阅下面的演示:

var Test = React.createClass({
  componentDidMount: function() {
    var dom = React.findDOMNode(this);
    console.log(dom);
    alert(dom);
  },
  render: function() {
    return React.DOM.div(null, 'test');
  }
});

React.render(React.createElement(Test), document.getElementById('r'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.13.1/react.js"></script>
<div id="r"></div>

请注意,从 React v0.14 开始

React.findDOMNode 变为 ReactDom.findDOMNode(this); 其中

var ReactDom = require('react-dom');

https://facebook.github.io/react/blog/2015/10/07/react-v0.14.html

中所述

React 15.0.1 要求此语法:ReactDOM.findDOMNode

例如

var x = ReactDOM.findDOMNode(this.refs.author);

对于更复杂的元素,比如在标准 DOM 元素上创建的 React 组件 refs 只给我们第一个 DOM 元素(组件的根元素)所以有时我们需要找到所需的节点在里面。很好的例子是 Material-Ui TextField 组件以及我们如何从中获取价值。

1.Required 进口

import React, { Component } from 'react';
import TextField from 'material-ui/TextField';
import ReactDOM from 'react-dom';

2.Virtual dom 和 ref="variable"

 <TextField floatingLabelText="Some title" ref="title" />

3.Query 里面的 TextField:

ReactDOM.findDOMNode(this.refs.title).querySelector("input").value

或多行:

ReactDOM.findDOMNode(this.refs.title).querySelector("textarea").value

我们从 TextField 容器开始并使用标准 DOM 查询 querySelector 获取想要的输入元素。该解决方案适用于任何复杂的组件,我们始终可以在其中进行查询。在 React (15.3.2).

上测试

我认为你不需要使用ReactDOM.findDOMNode,你可以使用简单的e.target.innerHTML。在此选项中,您不需要导入 ReactDOM.