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是相等的?
没有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)
请在此处详细了解“命名导出”和“默认导出”