例如,在CommonJS中:
var actions = module.exports = Flux.createActions({
SubmitSignup: function(payload) {
utils.xhr('POST', payload.url, payload.data, function(response, status){
actions.ReceiveSignupResponse({
response: response,
status: status,
receiver: payload.receiver
});
});
return payload;
},
ReceiveSignupResponse: function(payload) {
payload.receiver.handleSignupResponse(payload.response, payload.status);
return payload;
}
});
这会将Flux.createActions(...)
表达式的值导出为模块,并将其分配给内部使用的局部变量actions
,以便操作可以相互引用。即使没有多指派单行,表达式的值仍可用作module.exports
。
ES6仍允许使用export default
为模块导出单个值,甚至允许为类和函数的值分配本地名称:
export default function foo() {...}
// or
export default class Foo { ...}
它还允许导出任意表达式(export default (whatever());
),并允许导出本地分配(export let actions = Flux.createActions({...});
),保留本地名称供本地使用,但是,不允许将赋值表达式导出为默认值 - 以下都是无效的:
export default let actions = Flux.createActions({...});
export default (let actions = Flux.createActions({...}));
export default as actions = Flux.createActions({...});
也没有可用于在内部引用值的modules.exports
等价物(实际上,像babel和其他转换器这样的工具会让你混合 - 并且匹配CommonJS和ES6模块,所以{{实际上,1}} 将工作,但这是非标准的,几乎是偶然的行为。)
当然,完全可以简单地先声明本地并稍后导出:
modules.export
那没关系。这似乎是一种奇怪的不协调,您可以为任何非默认值导出和分配本地名称,包括任意表达式,以及默认函数和类,而不是表达式。
有没有更好的方法来做到这一点,我错过了?
答案 0 :(得分:3)
除了自我导入外,我认为没有。
原因几乎是default
没有有效的标识符,所以如果你必须选择自己的标识符,那么你将不得不使用标准的显式导出方式:
let x = …;
export { x as y };
export default x;
请注意,export let x = …
只是export { x as x }
的语法糖,即本地名称和导出名称相同的地方,默认导出的情况绝对不是这样。
顺便说一句,默认导出一个赋值确实有效,你就是不能使用变量声明。尝试
let actions;
export default (actions = Flux.createActions({...}));