在 Javascript 中导出 class 个实例

Export of a class instance in Javascript

我正在查看 this 代码,其中 class 实例以有点奇怪的方式导出。

提供截图。导出如下:

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

export default new RegisterStore()
export { RegisterStore }

并在index.js中导入如下:

import registerStore from './stores/RegisterStore'
...
const stores = {
registerStore
...
}

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

没有export default new RegisterStore() and export { RegisterStore }不相等。在 export { RegisterStore } 中,您将 class 作为导出对象的一部分导出,而在 export default new RegisterStore() 中,您将导出 class.

的实例

更进一步。 export default new RegisterStore() 应该足以正常工作。除非您不想从同一个文件导入多个变量,否则再次导出行是无用的。在那种情况下,它就像:

export new RegisterStore();
export const anotherVariable = "TESTTEST";

并像这样导入:

import {RegisterStore, anotherVariable} from './stores/RegisterStore';

根据您上次的查询: 否

export default new RegisterStore() AND 
export default const RegisterStore = new RegisterStore() are equivalent?

也不等价。

首先 export default const RegisterStore = new RegisterStore() 抛出错误,因为 RegisterStore 已经被声明为 class 而你又用 const 声明它。

其次:

export default const NewRegisterStore = new RegisterStore()

也是错误的,因为默认导出必须以匿名形式导出,或者必须在导出之前先声明变量。

对于你的例子,它应该是这样的:

let NewRegisterStore; export default NewRegisterStore = new RegisterStore();

所以:

export default new RegisterStore() AND 

let NewRegisterStore; export default NewRegisterStore = new RegisterStore(); are equivalent

请详细阅读 "named export" 和 "export default" here