三年来,我一直在使用一些JavaScript小片段,但是现在我正在构建一个React应用程序,并且正在研究它。有一件我不了解的基本事情。React使用Dispatcher and Stores构建其Flux模式,我不明白的是,该Dispatcher在所有应用程序中都是可见的,因为Actions使用分派器来分派动作,而Stores向Dispatcher注册以获取通知(因此并非每次都是新的Dispatcher)。那么,如何实现这个“全局”范围或所谓的范围?如何使用ES6类(模块)实现这一目标?
由于我缺乏对真正的JavaScript进行编程的经验,因此这个问题可能尚不清楚,我希望借助社区评论的丰富内容,我可以安排这些问题。
无论您身在何处,都可以始终将变量分配给window.MyClass = whatever(global.MyClass用于nodejs),并从应用程序中的任何其他文件访问这些值。但是,这并非始终是在应用程序中全局共享数据的最佳方法。nodejs(或ES6中的AMD)中的模块加载器接受您导出的所有内容并将其缓存。假设您有一个类似的文件:
window.MyClass = whatever
global.MyClass
MyModule.js:
class MyClass { constructor() { this.someData = 55; } } export default (new MyClass);
现在,无论何时我们从其他地方需要此文件,都总是得到的SAME实例MyClass。这表示:
MyClass
file1.js:
import MyClass from './MyModule' MyClass.someData = 100;
file2.js:
import MyClass from './MyModule' console.log(MyClass.someData);
这称为单例模式,我们在整个应用程序中传递您的类的一个常见实例。因此,通过这种方式,我们可以MyClass从不同的文件访问的相同实例,而不会污染全局范围(我们避免进行分配global.MyClass但要实现相同的功能)。