ES6如何做多个默认导出

edm*_*rto 7 ecmascript-6 reactjs react-redux

我仍然对react + redux和ES6感兴趣.我正在尝试实现socketio,我遇到了必须导出socketio连接我的redux连接的问题.

redux连接

export default connect(mapStateToProps, matchDispatchToProps)(UserList);
Run Code Online (Sandbox Code Playgroud)

socketio连接

export default socketConnect(App);
Run Code Online (Sandbox Code Playgroud)

问题 使它们一起工作的正确语法是什么?

Jef*_*ege 15

我没有看到提及的一种可能性。您只能有一个默认导出,但导出的可以是具有多个成员的对象:

// MyModule.js
const componentA => () => {return <div>Component A</div>;}
const componentB => () => {return <div>Component B</div>;}

export default { componentA, componentB };
Run Code Online (Sandbox Code Playgroud)

进而:

import MyModule from "./MyModule";

MyModule.componentA();
Run Code Online (Sandbox Code Playgroud)

  • 您不是在导出多个,而是在劝说一个包含两个成员的对象。 (9认同)

AJc*_*dez 14

您不能有多个默认导出.

相反,使用命名导出.

// moduleName.js    

export const ConnectedUserList = connect(mapStateToProps, matchDispatchToProps)(UserList)

export const RealTimeApp = socketConnect(App);
Run Code Online (Sandbox Code Playgroud)

按名称要求导出.

// otherModule.js
import { ConnectedUserList, RealTimeApp } from "./moduleName"
Run Code Online (Sandbox Code Playgroud)


小智 6

您可以混合使用默认导出和命名导出。

export default ConnectedUserList = connect(mapStateToProps, matchDispatchToProps)(UserList)

export const RealTimeApp = socketConnect(App);
Run Code Online (Sandbox Code Playgroud)

之后,您可以导入您的出口:

import ConnectedUserList, { RealTimeApp } from "./moduleName"
Run Code Online (Sandbox Code Playgroud)


小智 6

export default () => {
    return {export1, export2};
}
Run Code Online (Sandbox Code Playgroud)