不能使用React.findDOMNode函数

时间:2015-04-04 07:30:30

标签: javascript reactjs

出于某种原因,我无法使用React.findDOMNode函数。浏览器抱怨类型错误,说React.findDOMNode不是一个函数。这是发生这种情况的代码:



var React = require('react');
var Backbone = require('backbone');
var Car = require('models/car');
var NewCarForm = React.createClass({
  handleSubmit: function(e) {
    e.preventDefault();
    var brand = React.findDOMNode(this.refs.brand).value.trim();
   ...
    this.props.handleNewCar(new Car({brand: brand, model:model,   name:name, kmTraveled:odometer, litresSpent:litres}));
    return;
  },
  render: function() {
    console.log("Inside NewCarForm");
    return (
      <form className="contentSection" onSubmit={this.handleSubmit}>
        <input type="text" placeholder="Car Brand" ref="brand" />
       ...
        <input type="submit" value="Post" />
      </form>
    );
  }
});
module.exports = NewCarForm;
&#13;
&#13;
&#13;

这是我尝试使用此功能的唯一模块。 React的其余部分工作正常,所以我不知道这里可能出现什么问题。

4 个答案:

答案 0 :(得分:39)

在React 15中(可能还有一些早期版本,我不确定)你根本不需要findDOMNode来使用引用:

this.refs.brand.value

就足够了。

答案 1 :(得分:14)

React React.findDOMNode(component)中引入了

0.13.0作为component.getDOMNode()的替代。

确保已安装React 0.13.1。如果您正在使用npm,则可以运行npm view react version来检查当前安装的React版本。

答案 2 :(得分:5)

findDOMNode方法已从react模块移至react-dom模块。

因此您已导入或需要react-dom模块中的ReactDOM,然后替换

var brand = React.findDOMNode(this.refs.brand).value.trim();

使用

var ReactDOM = require('react-dom');
var brand = ReactDOM.findDOMNode(this.refs.brand).value.trim();

答案 3 :(得分:2)

我会评论@romkyns的答案,但我没有代表。

所以,我一直在关注教程:

https://spring.io/blog/2015/09/15/react-js-and-spring-data-rest-part-2-hypermedia

通过在github上更改项目最新版本的内容。代码中的错误与我也投票的答案有关,但意识到出现了错误。

因此,您必须按React.findDOMNode替换ReactDOM.findDOMNode,而不是按照您的说明删除findDOMNode

我不确定这是否是由于Reactjs的新版本,但这给了我期待已久的结果。