2015-12-14 73 views
1

我一直在研究React/Flux,并且对组件外变量的声明感到困惑,如下面的代码所示。React + Flux - 如何避免全局变量

CounterComponent.js

var count; 
function getCount(){ 

} 
var CounterComponent = React.createClass({ 
    getInitialState: function(){ 
    return getCount(); 
    }, 
    render:function(){ 
    } 
}) 
module.exports = CounterComponent; 

如上面的代码中,怀疑是变量数量和功能getCount将似乎是全球在这里。可以在这里声明变量和函数,在组件之外或需要放置在里面。这看起来像全球污染。另外,如果我们考虑一个商店,在下面看到了很多例子,在这里,变量CHANGE_EVENT似乎是全球性的,没关系。

CounterStore.js

var CHANGE_EVENT = 'change'; 
var MainStore = assign({},EventEmitter.prototype, { 
    AppDispatcher.register(function(payload){ 
    var action = payload.action; 
    switch(action.actionType){   
    } 
    }); 
}); 
module.exports = MainStore; 

...我已经寻找这个答案,但不可能得到正确的答案。从JavaScript的角度来看,它看起来像它的污染全球,但在React中呢?

回答

2

这取决于您使用的构建系统,如果您使用的系统如browserifywebpack,那么没有变量将是全局变量。

所以,如果你不使用捆绑库,我建议你用匿名函数包装你的源代码,这样你就不会污染全局名称空间。

但我强烈建议你采用现代的方法来使用webpack,看起来更受React和Flux社区的欢迎。

+0

我使用的是browserify,但如果我在开发工具中看到js文件,则所有的js文件都被连接在一起,并且变量看起来像是全局的。不是吗? – whyAto8

+0

不,browserify不只是连接文件。变量的范围与它们定义的文件绑定。而且,您只能使用module.exports或require语句在文件间共享变量。这是browserify(或webpack)的一个非常好的属性,并允许您编写代码而不用担心可变冲突。如果你想测试它,只需打开你的控制台并键入你认为可能是全局的变量名。谢谢。 –

+0

我刚刚编辑了我的问题,并提供了更多的细节,特别是module.exports的东西。你可以看看你的答案是否仍然有效。 – whyAto8