2015-04-04 64 views
13

出於某種原因,我無法使用React.findDOMNode函數。瀏覽器抱怨類型錯誤,說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;

這是我嘗試使用此功能的唯一模塊。 React的其餘部分工作正常,所以我不知道這裏可能是什麼問題。

+2

嘗試打印出「響應」和「React.version」,以確保你不拉動多個版本的反應,因爲沒有其他真正的理由你不會擁有它。 – kakigoori 2015-04-05 22:29:34

+3

使用ReactDOM.findDOMNode解釋[這裏](http://stackoverflow.com/questions/33031516/reactjs-finddomnode-and-getdomnode-are-not-functions/33031619#33031619)。 – upg 2016-04-17 07:28:29

回答

14

React.findDOMNode(component)被引入React 0.13.0作爲component.getDOMNode()的替代品。

確保您安裝了React 0.13.1。如果您使用的是npm,則可以運行npm view react version來檢查當前安裝了哪個版本的React。

+1

反應版本是0.13.1。我會嘗試getDOMNode()函數。 – LazyDal 2015-04-04 15:51:57

38

在陣營15(也可能是一些早期版本,我不知道)你不需要findDOMNode在所有使用裁判:

this.refs.brand.value 

就足夠了。

+0

這個完美的作品 – Kokodoko 2016-06-28 13:39:54

+0

完美的布拉沃! – UFM 2016-11-16 21:44:28

+0

這應該是被接受的......因爲事情已經改變 – 2017-04-21 10:09:48

2

我會評論@romkyns的答案,但我沒有代表。

所以,我一直在下面的教程:

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

通過改變從GitHub上項目的最新版本的內容。代碼中有一個錯誤,它涉及到我也投了票的答案,但是意識到有一個錯誤。

因此,您必須用ReactDOM.findDOMNode替代React.findDOMNode,而不是刪除findDOMNode

我不確定這是否是由於新版本的Reactjs造成的,但是這給了我期待已久的結果。

+0

Woops,我沒有看到@upg的評論 – 2016-09-26 14:39:31

1

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();