使用webpack,ES6,ReactJS导入JavaScript文件和调用函数


76

尝试做一些我想会很简单的事情。我想导入一个现有的JavaScript库,然后调用它的函数。因此,例如,我想导入blah.js,然后调用blah()。

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;

只是想知道要完成这项工作我需要做什么神奇的组合。也许我只是错过了重点。该示例给出错误“ TypeError:_blah.blah未定义”。


1
如果没有您要导入的文件的示例,则无法回答。您发布的代码没有错,但是它是否起作用取决于从中导出的内容blah.js
loganfsmyth '16

签入blah.js您是否已命名导出blah对象。developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...
Everettss

Answers:


162

命名出口:

假设您创建了一个名为的文件utils.js,其中包含您希望其他模块(例如React组件)可以使用的实用程序功能。然后,将每个函数命名为export

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

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

假设utils.js与React组件位于同一目录中,则可以使用如下所示的导出方式:

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

或者,如果愿意,可以将整个模块的内容放在一个通用的命名空间下:

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

默认出口:

另一方面,如果您有一个仅做一件事的模块(可以是React类,一个普通函数,一个常量或其他任何东西),并且想让其他人使用该模块,则可以使用默认的export。假设我们有一个file log.js,其中只有一个函数可以注销被调用的任何参数:

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

现在可以这样使用:

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

log导入时不必调用它,实际上可以随心所欲地调用它:

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

合并:

一个模块既可以具有默认导出(最多1个),也可以具有命名导出(一个一个地导入,或*与别名一起使用)。React实际上有这个,请考虑:

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

有道理,但现在我得到这样的错误:SyntaxError:导出声明​​可能只出现在模块的顶层
user1686620

然后,您可能正在将其他模块中的内容导出。读取错误时,您需要在顶层(即,任何块之外)进行操作。
tobiasandersen

如何仅导入util并调用util.add(),util.multiply()之类的函数?
jiawen '17

@jiawen您可以这样做:(import * as util from './utils.js'; 我也将此添加到了答案中)。
tobiasandersen

哦,我错过了。谢谢!
jiawen

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

如果执行上述操作,您将可以使用utils.js中的函数

utils.someFunction()
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.