2015-05-27 32 views
9

Tôi đang cố sử dụng đầu vào tập tin phản ứng-bootstrap với jquery fileupload(). Với jquery thẳng tôi sẽ làm $('#fileUpload').prop('files') để có được các tập tin để vượt qua để gọi tập tin tải lên. Tuy nhiên, tôi không biết làm thế nào để có được các tập tin một cách chính xác với phản ứng-bootstrap.Lấy đối tượng tập tin từ tập tin Đầu vào

<Input type='file' label='Upload' accept='.txt' ref='fileUpload' buttonAfter={uploadFileButton}/> 
+0

@Daniel tôi đã sử dụng câu trả lời của tôi dưới đây. Bạn đang gặp phải vấn đề gì? –

+0

Xem nó không hoạt động cho tôi: http://jsfiddle.net/danyaljj/b1fhnb6q/2/ – Daniel

+0

@Daniel Bạn không thể truy cập this.refs bên ngoài lớp phản ứng 'Hello'. Lỗi của bạn "Uncaught TypeError: Không thể đọc tệp 'Tệp tải lên' không xác định thuộc tính" đang nói this.refs là không xác định, không phải là tệp Tải lên. Bạn cần đặt tham chiếu trong hàm bên trong lớp, ví dụ: http://jsfiddle.net/0ttmh4hs/ –

Trả lời

14

Thuộc tính chuỗi ref là considered legacy và rất có thể sẽ không được dùng nữa vào một thời điểm nào đó trong tương lai. Cách để làm điều này bây giờ là với một ref gọi lại. Dưới đây tôi chứng minh bằng cách sử dụng một chức năng mũi tên ES6.

Thay đổi yếu tố đầu vào của bạn để:

<Input 
    type='file' label='Upload' accept='.txt' 
    buttonAfter={uploadFileButton} 
    ref={(ref) => this.fileUpload = ref} 
/> 

Sau đó, bạn có thể sử dụng:

const file = this.fileUpload.files[0];

Và vân vân.

+4

Có ý tưởng nào về cách thực hiện điều này trên phần tử FormControl không, việc xem xét đầu vào có bị phản đối không? – Nift

+1

Đây phải là câu trả lời được chấp nhận do những thay đổi mới với React 15 :) – Sticky

8

Khá thẳng về phía trước; Tôi hoàn toàn bỏ lỡ điều này:

var files = this.refs.fileUpload.getInputDOMNode().files; 
+0

Bạn có thể chia sẻ nơi bạn tìm thấy câu trả lời này không? Tôi cũng đang sử dụng React-Bootstrap để xây dựng ứng dụng của mình, nhưng thật khó để tìm tài nguyên hướng dẫn cách tương tác với dữ liệu bằng cách sử dụng phản ứng khởi động. – tet

+0

@ T.O Tôi nghĩ rằng tôi đã tự tìm ra. Đối với hầu hết các vấn đề React của tôi, tôi chỉ tập hợp các kiến ​​thức về html, jquery, vv và các thông tin cơ bản về React và bootstrap mà tôi có thể tìm thấy trên các trang của họ và trên SO. –

+0

Ồ, tôi hiểu rồi. Cảm ơn bạn đã trả lời. – tet

0

Thêm vào fahad's answer, nếu bạn không thể sử dụng chức năng mũi tên (do hỗ trợ trình duyệt cũ hơn hoặc vì một số lý do khác), bạn phải liên kết ngữ cảnh React với hàm.

<Input type='file' label='Upload' accept='.txt' 
    buttonAfter={uploadFileButton} 
    ref={ function(ref) { this.fileUpload = ref }.bind(this) } 
/> 
0

Điều này phù hợp với tôi.

cho phép tệp = this.refs.fileUpload.files [0];

1

tôi giải quyết upload file như thế này cho React-Bootstrap với một nút tìm kiếm tùy chỉnh:

addFile = (event: any): void => { 
    console.log(event.target.files[0]); 
} 

<FormGroup> 
    <ControlLabel htmlFor="fileUpload" style={{ cursor: "pointer" }}><h3><Label bsStyle="success">Add file</Label></h3> 
     <FormControl 
      id="fileUpload" 
      type="file" 
      accept=".pdf" 
      onChange={this.addFile} 
      style={{ display: "none" }} 
     /> 
    </ControlLabel> 
</FormGroup> 
Các vấn đề liên quan