Javascript 模块和应用程序范围的数据

标签 javascript reactjs

在编写 javascript 模块时,我很困惑,在哪里以及如何存储可以在应用程序范围内使用的数据。

假设我有一个模块可以从服务器获取一些急需的数据。假设它是配置数据。

获取数据.js

function getData() {
    return fetch('http://data.com/my-data')
    .then(response => response.json())
}

export default getData; // Returns a promise

该应用程序是一个 React 应用程序,需要渲染一些组件,但会在未定义的点使用我们的数据。

应用程序.js

import getData from 'getData.js';

getData.then((data) => {
    render( <TheBestApp />, document.getElementById(‘root') );
});

<TheBestApp /> 层次结构中的某个点数据将被使用。

获取数据以供此处所有应用程序使用的最佳方法是什么? 这些是我看到的 2 个选项:

  1. 以某种方式将数据传递给层次结构中的每个组件(看起来很乱)
  2. 将数据存储在全局对象中,然后呈现应用程序,但我听说要避免全局范围

还有其他方法吗?这方面的最佳做法是什么?

最佳答案

我会回答你问题的“任何其他方式”部分,因为我不确定这是否是最佳实践,尤其是在 ReactJS 环境中(我没有这方面的经验)。

既然你不相信我的回答:

在 AngularJS 中,这是我使用服务的地方,就数据而言,它本质上是一个单例。您可以在 ES6 中使用类上的静态函数来模拟这一点。

例子:

export default class DataService {
  static getData() {
    if(this.data) {
      return Promise.resolve(this.data);//keeps function calls consistent
    }
    return new Promise(() => {
      fetch('http://data.com/my-data')
      .then(response => {
        response.json()
      })
      .then((data) => {
        this.data = data;
        resolve(data);
      })
    }
  }
}

然后这将被导入并使用 DataService.getData() 调用。如果您没有数据,它会获取数据,否则它会立即将数据提供给您。

关于Javascript 模块和应用程序范围的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39840768/

相关文章:

javascript - 在 onFetch (BIRT) 中使用行对象

javascript - 分析 Facebook Javascript 问题 : “FB is not defined”

javascript - 很想从 .getElementsByTagName 获取属性吗?

javascript - react 表隐藏自定义访问器但包含在全局过滤中

reactjs - 无法在 Storybook 中按类名设置我的 React 组件的样式

select - React,无法选择<select>的第一个选项

javascript - 如何从嵌套对象中获取键?

javascript - 如何模拟具有 require 字段的 Angular Directive(指令)

angular - ReactJs 是否有像 Angular 4.0 那样的 AOT?

javascript - 为什么我在系统中第一次运行 react js 项目时收到此错误消息?