2016-03-08 102 views
1

我的应用程序中有一些状态来自服务器,并且不会改变(在用户会话的生命周期中)。该状态在HTML中引导。我应该在商店中存储永不改变(自举)数据吗?

我应该将它作为商店的一部分并入减速机吗? const bootstrappedData = (state, action) => state

或者我应该公开一些像bootstrappedData.get('key')这样的全球帮手吗?

回答

2

有趣的是,我昨天刚刚在我自己的商店中发布了关于数据的相同决定。我得出的结论是,我们只应将有状态的数据存储在Redux存储中,即能够维护状态的数据或可能发生更改的数据。静态数据根据定义没有状态,因此不需要像这样跟踪。

因此,我通常有一个/common/app-const.js文件,我在这里存储这些类型的静态对象。例如,我在这里存储了Redux的DEFAULT_STATE,但也存储了其他一些不会更改的对象(因此不会在Redux中进行跟踪)。

现在,让我们说其实我是想允许最终用户操纵numRowsnumCols在UI,以及在这一点上我一定会需要把这些在终极版商店,但不是现在,因为他们只是静态的常量!

/common/app-const.js

export const DEFAULT_STATE = { 
    model: {}, 
    timer: { 
     isRunning: false, 
     ticks: 0 
    } 
}; 

export const GRID_DATA = { 
    numRows: 50, 
    numCols: 75, 
}; 

每当我需要这个静态的数据,这是作为一个导入一样容易:

import { GRID_DATA } from '../common/app-const'; 
1

略与此相关的问题是异步(不是自举),而是静态数据,因此,存储数据到存储区域与存储区域之外是有折衷的。


店内

的观光

  • 容易看到和调试数据,而无需使用console.log
  • 查询数据是通过选择同步

缺点

  • 概念不准确的,因为从定义静态数据是无状态的,而专卖店是为了保持状态

商店

PROS

缺点

  • ,因为数据是异步,你就必须出口异步数据访问API(与同步选择)
  • 异步数据导致了状态的组件(取在生命周期挂钩的数据和状态设置的数据,如)

我做了一个大型的生产应用了前一种方式,并且将多回想起来,已经完成了后者。

相关问题