2017-07-25 94 views
0

功能我有包含此代码JS文件:导入从JS来JSX

module.exports = function loadMyFun() { 

    function activateSite($currentItem) { 
     ... 
    } 
    ... 
} 

而且我希望将其导入到一个JSX文件,我试图做这样的,但我不工作:

import MyNav from './MyNav.js'; 

const top = MyNav.activateSite(); 

    componentDidMount() { 
     var self = this; 
     MyNav.activateSite($(self)); 
    } 
...   

我得到这个错误:

Uncaught TypeError: _MyNav.default.activateSite is not a function

不知道如何解决这个问题?

+0

你使用的是webpack吗? – Aron

回答

3

如果您提供的代码实际上是您尝试加载的模块,那么该模块存在一些问题。

您正在导出一个构造函数loadMyFun,您在导入它后不调用/实例化。

如果你想实例化这样的构造函数const myNav = new MyNav()你将有一个导出构造函数的实例。

为了让您activateSite功能的工作,你就必须把它分配给该实例本身,并通过这样的分配也将其移出的loadMyFunc局部范围:this.activateSite = function(){...}

如果你不需要缠任何信息你的activateSite函数我建议你用你的函数导出一个对象,而不是loadMyFun的方法。

//myModule.js 
module.exports = { 
    activateSite: function(){ ... } 
} 
//otherFile.js 
import { activateSite } from './myModule.js' // With destructuring 
activateSite() 

import myModule from './myModule.js' // Without destructuring 
myModule.activateSite() 
+0

“您正在导出构造函数loadMyFun” - 这是一个函数。我们无法确定它是否是构造函数。它没有足够的代码。 – Quentin

+0

我假设它是因为他试图访问里面的定义函数。这需要'this',或所有函数的对象作为返回值。 – JoschuaSchneider

4

activateSite是一个变量,它是本地作用域loadMyFun函数。

它不在loadMyFun的范围之外。

它不是loadMyFun函数对象的属性。

如果不重写模块,则无法访问它。

例如

module.exports = function loadMyFun() { 
}; 

module.exports.activeSite = function activateSite($currentItem) { 
};