【发布时间】:2017-12-01 01:36:14
【问题描述】:
简介:
所以我在 Redux 上苦苦挣扎了很久。我想我现在确实理解了这个概念。本质上(并且相当简化):
- 有一个 Store 保存您所有的应用程序相关状态,
- 用户与应用的交互可以触发 操作 描述性标题和一些数据负载
- Reducer 使用 Store 中的当前状态和 Actions 有效负载将更新后的状态放入存储中(在旧状态之上)
现在这很好,因为可以将组件(甚至在反应树的深处)与状态连接起来,并将状态用作单一的事实来源(即始终知道用户是否登录)。
在将 Redux 与 Meteor 结合使用时,我遇到了这个问题,我仍然不清楚为什么要在 Meteor 应用程序的 Redux 存储中放入哪些信息以及要放入哪些信息。
示例:
假设我们有一个帖子集合。通常我们只会通过 Minimongo 获取结果并将结果显示给用户。现在假设我们想让我们的 Redux 存储作为一个单一的事实来源来保存所有数据。基本上必须将 minimongo 与 Redux 存储同步。 大概有人会在 componentDidMount 上调度一个动作来将数据加载到存储中。
store.dispatch({
type: 'GET_POSTS',
posts: Posts.find().fetch(),
});
这将被简化为:
const postReducer = (state = [], action) => {
switch (action.type) {
case 'GET_POSTS':
return action.posts;
default:
return state;
}
};
现在要让这个商店保持最新状态,它必须与 Posts 集合同步,大概是这样的(尽管我不完全确定我必须在我的代码中的哪个位置放置该跟踪器):
Tracker.autorun(() => {
store.dispatch({
type: 'GET_POSTS',
posts: Posts.find().fetch(),
});
});
现在我的主要问题是:如何避免 Redux 存储的大量膨胀,因为我理解的方式是每当有人提交新帖子时,我们将拥有当前状态 + 新状态 (这本质上是当前状态+新帖子)。 如果您有几个人来回发帖,这可能会很快爆炸,或者即使您的初始帖子数量很大。
【问题讨论】:
标签: reactjs meteor redux react-redux