我当时在看this代码,其中的类实例以某种奇怪的方式导出。
提供片段。导出如下:
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
等价吗?
答案 0 :(得分:4)
没有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
请详细了解“命名导出”和“默认导出” here