2016-04-15 49 views
0

在清洁反应应用程序设计方面,我确定如何将应用程序设置传递给不属于组件树的模块。如何通过应用程序设置来存储

E.g.我连接到REST API,因此需要将主机名传播到组件,但也传播到商店 - 我正在使用Reflux。

将设置传递给组件可以很容易地通过上下文来实现,但由于商店不属于它,所以最干净的方法是什么?

到目前为止,我认为这些方法:

  • 从成分通过设置到行动,我接受它在每家商店的听众。
  • 使用它在我的index.js初始化,可以在我的店里

都可以用来似乎并不理想,我的一些DI容器。任何提示赞赏!

回答

1

在大多数情况下,您不应该保存应用程序设置。

你应该考虑一下你的应用程序,比如某种接收状态作为参数并返回视图的函数。应用程序状态(通常)的更改会导致结果视图中的更改。 Flux商店是你保持这种状态的方式。 API主机名不是您希望影响您的应用程序的东西。它只是您的应用程序需要知道的正确工作的信息有效载荷(说配置,而不是设置)。所以,你应该保持它作为信息有效载荷。模块,类,全局变量,某种类型的DI,你可以考虑任何你认为有用的东西。

我通常使用所有配置创建单独的模块导出对象。例如:

const config = { 
    api: { 
    hostname: 'localhost', 
    port: 3000 
    } 
    // ... 
}; 

export default config; 

然后只是导入它。喜欢的东西:

import config from "../config"; 

const api = new API(config.api); // just for example 

但如果你真的需要有某种能够影响UI设置工作。(比如延迟显示弹出;它例如可以是即使我们考虑改变这一延迟取决于用户的更好行动),您应该创建一个存储并使用它,就像使用常规的磁通存储(订阅更改,更改动作等)一样。

+0

感谢您的想法!我同意配置不应该是一个状态。但是按照函数式编程的想法,我想将配置注入到商店中,而不是让它从某个外部环境中导入它,这在其他环境中会导致它无法测试。因此我认为依赖注入将是最好的选择。 – schneck

相关问题