尝试做一些我认为非常简单的事情。我想导入一个现有的 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 未定义”。
命名导出:
假设你创建了一个名为 的文件utils.js,其中包含要供其他模块(例如 React 组件)使用的实用函数。然后,你将每个函数命名为导出:
utils.js
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 类、普通函数、常量或其他任何东西),并且想让其他人可以使用这个东西,那么你可以使用默认导出。假设我们有一个文件log.js,只有一个函数,它会输出调用它的任何参数:
log.js
export default function log(message) { console.log(message); }
现在可以像这样使用:
import log from './log.js'; ... log('test') // Would print 'test' in the console.
log导入时您不必调用它,实际上您可以随意调用它:
log
import logToConsole from './log.js'; ... logToConsole('test') // Would also print 'test' in the console.
合并:
模块可以同时具有默认导出(最多 1 个)和命名导出(可以逐个导入,也可以使用*别名)。React 实际上有这个,请考虑:
*
import React, { Component, PropTypes } from 'react';