2015-04-04 20 views
13

Vì một số lý do, tôi không thể sử dụng chức năng React.findDOMNode. Trình duyệt phàn nàn về lỗi kiểu, nói rằng React.findDOMNode không phải là một hàm. Đây là mã mà điều này xảy ra:Không thể sử dụng chức năng 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;

Đây là mô-đun duy nhất mà tôi cố gắng sử dụng chức năng này. Phần còn lại của React hoạt động tốt, vì vậy tôi không có ý tưởng gì có thể là vấn đề ở đây.

+2

thử in ra "Phản ứng" và "React.version" để đảm bảo bạn không kéo theo nhiều phiên bản phản ứng, bởi vì không có lý do thực sự nào khác khiến bạn không có nó. – kakigoori

+3

Sử dụng ReactDOM.findDOMNode như được giải thích [ở đây] (http://stackoverflow.com/questions/33031516/reactjs-finddomnode-and-getdomnode-are-not-functions/33031619#33031619). – upg

Trả lời

14

React.findDOMNode(component) được giới thiệu trong React 0.13.0 làm thay thế cho component.getDOMNode().

Đảm bảo rằng bạn đã cài đặt React 0.13.1. Nếu bạn đang sử dụng npm, bạn có thể chạy npm view react version để kiểm tra phiên bản React nào hiện đang được cài đặt.

+1

Phiên bản phản ứng là 0.13.1. Tuy nhiên, tôi sẽ thử hàm getDOMNode(). – LazyDal

38

Trong Phản ứng 15 (và có thể một số phiên bản trước đó, tôi không chắc chắn), bạn không cần phải sử dụng findDOMNode refs tại tất cả:

this.refs.brand.value 

là đủ.

+0

Điều này hoạt động hoàn hảo – Kokodoko

+0

Perfect Bravo !! – UFM

+0

Điều này phải được chấp nhận ... vì mọi thứ đã thay đổi –

2

Tôi đã nhận xét về câu trả lời @romkyns nhưng tôi không có đại diện.

Vì vậy, tôi đã theo một hướng dẫn:

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

Bằng cách thay đổi nội dung từ các phiên bản mới nhất của dự án trên github. Đã xảy ra lỗi cả trong mã liên quan đến câu trả lời tôi cũng đã bỏ phiếu, nhưng nhận ra có lỗi.

Vì vậy, bạn phải thay thế React.findDOMNode bằng ReactDOM.findDOMNode chứ không phải bằng cách xóa findDOMNode như bạn đã nêu.

Tôi không chắc liệu điều này có phải là do phiên bản mới của Reactj hay không nhưng điều này đã cho tôi kết quả chờ đợi.

+0

Rất tiếc, tôi không thấy nhận xét từ @upg –

1

Phương pháp findDOMNode đã chuyển từ mô-đun react thành mô-đun react-dom.

Vì vậy, bạn có nhập khẩu hoặc yêu cầu ReactDOM từ react-dom mô-đun sau đó thay thế

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

Với

var ReactDOM = require('react-dom'); 
var brand = ReactDOM.findDOMNode(this.refs.brand).value.trim(); 
Các vấn đề liên quan