在过go 的三年里,我一直在使用JavaScript的一些小片段,但现在我正在构建一个React应用程序,我正在深入其中.有一件基本的事我不明白.React使用一个Dispatcher和Stores来构建它的流量模式,我不明白的是,这个Dispatcher在所有应用程序中都是可见的,因为Actions使用Dispatcher来调度操作,并将存储注册到Dispatcher以获得通知(所以它不是每次都是一个新的Dispatcher).那么,我如何才能实现这个"全球"范围或任何它被称为?如何使用ES6类(模块)实现这一点?

这个问题可能不清楚,因为我缺乏编写真实JavaScript的经验,我希望有了hep的社区 comments ,我能够安排这个问题.

推荐答案

无论您身处何处,都可以将变量分配给window.MyClass = whatever(NodeJ为global.MyClass),并从应用程序中的任何其他文件访问这些值.不过,这并不总是在应用程序中全局共享数据的最佳方式.nodejs(或ES6中的AMD)中的模块加载器接收导出的任何内容并缓存它.假设你有一个文件,比如:

我的模块.js:

class MyClass {
  constructor() {
    this.someData = 55;
  }
}

export default (new MyClass);

现在,每当我们从其他地方需要这个文件时,我们总是得到相同的MyClass实例.这意味着:

文件1.js:

import MyClass from './MyModule'
MyClass.someData = 100;

文件2.js:

import MyClass from './MyModule'
console.log(MyClass.someData);

这被称为单例模式,我们在应用程序中传递类的一个公共实例.因此,通过这种方式,我们可以从不同的文件访问相同的MyClass个实例,而不会污染全局范围(我们避免分配给global.MyClass,但实现了相同的功能).

Reactjs相关问答推荐

表格提交中的react 路由导航

自动化幻灯片放映以防止React中重复过多的正确方法是什么

从app.js导航,这是在BrowserRouter包装之外

当项目开始时,它不会从三元运算符(REACT)加载一些tailwind 类名称

如何从Reaction-Arborist树获取排序数据

svg每条路径上的波浪动画

生产部署:控制台中 Firebase 无效 api 密钥错误

Next.js `getLayout` 函数没有被调用

是的验证:使用 useFieldArray 访问表单值

在React Router 6中,在路由渲染后更新路由数据

Material UI @mui/material/Button vs @material-ui/core/Button,它什么时候改变的,旧版本的文档在哪里

未捕获的类型错误:useSelector 不是函数

如何避免在 react useEffect 上滚动时出现小的延迟?

我正在try 使用 cypress 测试我的下拉列表,它 Select 值但不提交它们(手动工作)

Reactjs 表单未反映提交时的更改

响应式媒体 React Tailwind

如何在 Cypress E2E 的站点上测试react 组件?

如何根据数据库中的值设置单选按钮选中? - react

MUI 卡组件上的文本未正确对齐

npm init vite@latest 和 npm init vite 有什么区别?