用Javascript导出类实例

une*_*et7 3 javascript singleton export reactjs

我正在看这段代码,其中以有点奇怪的方式导出了一个类实例。

提供一个抢断。导出如下:

    class RegisterStore {
    @observable success = false
    @observable failure = false
    @observable errors = {}
    ...
    }

export default new RegisterStore()
export { RegisterStore }
Run Code Online (Sandbox Code Playgroud)

并按如下所示将其导入index.js中:

import registerStore from './stores/RegisterStore'
...
const stores = {
registerStore
...
}
Run Code Online (Sandbox Code Playgroud)

为什么第一个代码的末尾有两个导出?是
export default new RegisterStore()
const NewRegisterStore = new RegisterStore(); export default NewRegisterStore相等的

Gau*_*wat 7

没有export default new RegisterStore() and export { RegisterStore }是不相等的。在export { RegisterStore } 导出类时,将类作为导出对象的一部分export default new RegisterStore()导出。

进一步。export default new RegisterStore()应该足以正常工作。直到您不想从同一文件中导入多个变量之前,再次导出行是无用的。在这种情况下,它将像:

export new RegisterStore();
export const anotherVariable = "TESTTEST";
Run Code Online (Sandbox Code Playgroud)

并像这样导入:

import {RegisterStore, anotherVariable} from './stores/RegisterStore';
Run Code Online (Sandbox Code Playgroud)

进一步查询:否

export default new RegisterStore() AND 
export default const RegisterStore = new RegisterStore() are equivalent?
Run Code Online (Sandbox Code Playgroud)

也不一样。

首先export default const RegisterStore = new RegisterStore()抛出错误,因为RegisterStore已经被声明为类,并且您再次使用const声明它。

其次:

export default const NewRegisterStore = new RegisterStore()
Run Code Online (Sandbox Code Playgroud)

这也是错误的,因为默认导出必须要么以匿名方式导出,要么必须在导出之前先声明变量。

以您的示例为例:

let NewRegisterStore; export default NewRegisterStore = new RegisterStore();
Run Code Online (Sandbox Code Playgroud)

所以:

export default new RegisterStore() AND 

let NewRegisterStore; export default NewRegisterStore = new RegisterStore(); are equivalent
Run Code Online (Sandbox Code Playgroud)

在此处详细了解“命名导出”和“默认导出”

  • @ swissArmyKnife7。没有。导出默认const RegisterStore = new RegisterStore()有很多问题。标识符RegisterStore已被声明。您不能再次执行const RegisterStore。其次,必须在单个语句中声明并导出导出默认变量。必须先声明它,或者仅将默认值导出为值。这是同一回事。我刚刚更新了答案。 (2认同)
  • 是的..这正是我想要的答案的最后一部分 (2认同)