在 Javascript 中导出类实例

IT技术 javascript reactjs singleton export
2021-05-03 08:37:26

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

提供剪断。导出如下:

    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()
const NewRegisterStore = new RegisterStore(); export default NewRegisterStore相等的

1个回答

export default new RegisterStore() and export { RegisterStore },不相等。export { RegisterStore } 您导出类的export default new RegisterStore()实例时,将类作为导出对象的一部分导出。

更远。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已经声明为类,并且您再次使用 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

在此处阅读有关“命名导出”和“导出默认值”的更多信息