2016-07-19 17 views
25

Cố gắng làm điều gì đó tôi nghĩ sẽ rất đơn giản. Tôi muốn nhập một thư viện JavaScript hiện có và sau đó gọi nó là các hàm. Vì vậy, ví dụ tôi muốn nhập blah.js và sau đó gọi blah().Nhập tệp JavaScript và chức năng gọi bằng cách sử dụng webpack, ES6, ReactJS

import React from 'react'; 
import {blah} from 'blah/js/blah.js'; 

class MyClass extends React.Component { 
    constructor() { 
     super(); 
    } 

    componentDidMount() { 
     window.addEventListener('resize', this.handleResize); 
    } 

    componentWillUnmount() { 
     window.removeEventListener('resize', this.handleResize); 
    } 

    handleResize() { 
     blah.blah(); 
    } 

    render() { 
      .... 
    } 
} 

export default MyClass; 

Chỉ cần tự hỏi sự kết hợp kỳ diệu của những điều tôi phải làm để thực hiện công việc này. Có lẽ tôi chỉ thiếu điểm. Ví dụ cho lỗi "TypeError: _blah.blah is undefined".

+1

Nếu không có một ví dụ về các tập tin bạn cố gắng nhập, điều này là không thể trả lời. Không có gì sai với mã bạn đã đăng, nhưng liệu nó có hoạt động hay không sẽ phụ thuộc vào những gì được xuất từ ​​'blah.js'. – loganfsmyth

+0

Kiểm tra trong 'blah.js' nếu bạn đã đặt tên là xuất khẩu đối tượng' blah'. https: //developer.mozilla.org/en-US/docs/Web/JavaScript/Tham chiếu/Báo cáo/xuất khẩu – Everettss

Trả lời

65

xuất khẩu tên:

Hãy nói rằng bạn tạo ra một tập tin gọi là utils.js, với các chức năng tiện ích mà bạn muốn làm cho có sẵn cho các module khác (ví dụ một Phản ứng thành phần). Sau đó, bạn sẽ làm cho mỗi hoạt động một tên xuất khẩu:

export function add(x, y) { 
    return x + y 
} 

export function mutiply(x, y) { 
    return x * y 
} 

Giả sử utils.js đó nằm trong thư mục tương tự như của bạn Phản ứng thành phần, bạn có thể sử dụng xuất khẩu của nó như thế này:

import { add, multiply } from './utils.js'; 
... 
add(2, 3) // Can be called wherever in your component, and would return 5. 

Hoặc nếu bạn thích, hãy đặt toàn bộ nội dung của mô-đun vào một không gian tên chung:

import * as utils from './utils.js'; 
... 
utils.multiply(2,3) 

Mặc định xuất khẩu:

Nếu bạn có một mô-đun chỉ thực hiện một điều (có thể là lớp React, hàm bình thường, hằng số hoặc bất kỳ thứ gì khác) và muốn làm cho mọi thứ có sẵn cho người khác, bạn có thể sử dụng xuất mặc định. Hãy nói rằng chúng ta có một tập tin log.js, chỉ với một chức năng mà các bản ghi ra bất cứ điều gì lập luận nó được gọi với:

export default function log(message) { 
    console.log(message); 
} 

này bây giờ có thể được sử dụng như thế này:

import log from './log.js'; 
... 
log('test') // Would print 'test' in the console. 

Bạn không cần phải gọi nó log khi bạn nhập nó, bạn có thể thực sự gọi nó là bất cứ điều gì bạn muốn:

import logToConsole from './log.js'; 
... 
logToConsole('test') // Would also print 'test' in the console. 

Combined:

Mô-đun có thể có cả xuất mặc định (tối đa 1) và xuất có tên (nhập từng cái một hoặc sử dụng * với bí danh). Phản ứng thực sự có này, hãy xem xét:

import React, { Component, PropTypes } from 'react'; 
+0

Làm cho tinh thần nhưng bây giờ tôi gặp lỗi như sau: Cú pháp: báo cáo xuất chỉ có thể xuất hiện ở cấp cao nhất của mô-đun – user1686620

+0

Sau đó, có thể bạn đang xuất thứ bên trong các khối khác. Khi lỗi đọc, bạn cần thực hiện nó ở cấp cao nhất (tức là bên ngoài bất kỳ khối nào). – tobiasandersen

+0

Làm cách nào tôi có thể chỉ nhập các hàm util và call như util.add(), util.multiply()? – jiawen

2
import * as utils from './utils.js'; 

Nếu bạn làm như trên, bạn sẽ có thể sử dụng chức năng trong utils.js như

utils.someFunction() 
Các vấn đề liên quan