将函数从JS导入JSX

时间:2017-07-25 07:58:18

标签: javascript reactjs jsx

我有一个包含此代码的JS文件:

.emacs

我想将它导入JSX文件,我尝试这样做,但我没有工作:

module.exports = function loadMyFun() {

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

我收到此错误:

  

未捕获的TypeError:_MyNav.default.activateSite不是函数

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

2 个答案:

答案 0 :(得分:4)

activateSite是一个本地范围loadMyFun函数的变量。

loadMyFun范围之外无法使用。

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

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

e.g。

module.exports = function loadMyFun() {
};

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

答案 1 :(得分:3)

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

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

如果要实例化像const myNav = new MyNav()这样的构造函数,那么你将拥有导出的构造函数的实例。

要使activateSite功能正常运行,您必须将其分配给实例本身并将其移出loadMyFunc的本地范围,方法如下:this.activateSite = function(){...} < / p>

如果您不需要围绕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()