- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
简介:
所以我在 Redux 上挣扎了很长时间。我想我现在确实理解了这个概念。本质上(并且相当简单):
现在这很好,因为我们可以将组件(甚至在 react 树的深处)与状态连接起来,并将状态用作单一事实来源(即始终知道用户是否登录)。
我的问题是在将 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 集契约(Contract)步,大概是这样的(尽管我不完全确定我必须在代码中放置该跟踪器):
Tracker.autorun(() => {
store.dispatch({
type: 'GET_POSTS',
posts: Posts.find().fetch(),
});
});
现在我的主要问题是:如何避免 Redux 存储的大规模膨胀,因为根据我的理解,每当有人提交新帖子时,我们都会有当前状态 + 一个新状态(这本质上是当前状态+新帖子)。如果您有几个人来回发帖,即使您最初的帖子数量很大,这也可能会很快爆炸。
最佳答案
感谢您提出这个问题!上周我在一次培训中了解了 React + Redux,我很想将其添加到 Meteor 中。男孩,从那时起我就发现自己陷入了兔子洞!
我知道您已经熟悉 Redux。对于那些没有这样做的人,你一定要检查these videos .
正如我所言written earlier ,
I've become aware of two issues. These issues arise when you let all data (including Collections) flow through the Redux Store:
- You loose out on Meteor reactivity (with vanilla Meteor, when the MongoDB updates, the data shown in the View also updates). Solution: We could write additional Redux actions & reducers on the server-side.
- You loose out on Meteor optimistic UI (with vanilla Meteor, when you would add a new Widget, the client will already try to predict what it should look like even before the server responds). In the example here, while calling a Redux action (e.g. to add a Widget), we essentially wait for the Meteor method to insert the Widget in the collection before moving onto the Reducer which will update the Redux Store, who's State in turn updates our View. (Of course, all of this happens so quickly that you wouldn't notice it, but you might notice it if you were running it on a slow server or when you'd have a mobile application). Solution: We could write additional logic in the actions that update the Store immediately with the new Widget, and if it turns out we weren't authorized to call the Meteor method, we can still use, within the Action, the
.catch
of the Promise to adjust the Store (removing the Widget we already added).So basically, by introducing Redux into our Meteor-React solution, we're missing out on two great features of Meteor. Both of them can be rebuilt using self-written logic, but it frankly seems a shame to do so.
我目前的看法:
除此之外,我一直在考虑一种试图将两个世界的优点结合起来的架构。这样的架构仍然会使用 Meteor 的订阅/发布功能(这样你就可以保持乐观的 UI 和服务器端更改发送到客户端),并使用 Redux Store 进行 UI 特定更改(想想过滤器按钮)。
一个更具体的例子:您可以通过应用程序内的 Meteor 发布/订阅来获取待办事项。但在实际将它们渲染到组件之前,您需要在中间添加一个过滤器函数。此过滤器功能取决于 Redux Store 对过滤器的说明。这又是由您按下的一些按钮定义的,这些按钮通过 Redux 操作和 reducer 传递到 Redux Store。
关于reactjs - 如何使用Redux在Meteor App中加载数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44789758/
我在尝试在 Meteor.com 上托管的经历非常复杂。 我经常收到“此网站已关闭。稍后再试。”。一开始我不知道为什么,但后来我怀疑问题是我不小心恢复了“system.users”集合造成的。我尝试在
我有点好奇,与复制 Meteor 应用程序、启动 tmux session 并仅运行 meteor 相比,Meteor Up(或其他 Meteor 应用程序部署过程,如 Modulus)是否能做任何花
我与meteor 合作创建了一个应用程序。在 meteor Meteor.methods 和 Meteor.publish 用于执行数据库操作。 I know use of Meteor method
我有一个相当大的 meteor 项目并安装了几个 meteor 包。我这样做只是为了试用一个 meteor 包,看看它是否适用于我的项目。不幸的是,在确定我不需要在我的项目中安装这些包后,我没有卸载这
对于生产为什么我应该“捆绑” meteor 应用程序而不仅仅是复制 服务器上的源使用“ meteor ”命令? 基本上有什么区别: “meteor bundle app.tar.gz”,然后安装正确版
我是 Meteor 的新手,我想知道我们如何要求用户在创建帐户时上传他的图片?我正在使用基本的 Meteor 帐户来创建用户帐户。我希望用户能够上传他的图片,并且还能够在他登录时和在我网站的登录页面上
我正在学习 Meteor Angular 2 教程。在第 6 步,我随机尝试了“ meteor 更新”,这使我的样本崩溃了。更新有效,服务器正在启动。然而,浏览器屏幕现在保持空白,并且在控制台中出现错
在我的 meteor app我需要实现表格排序。现在我正在做的是设置一个 session variable对于每个列并根据要排序的项目切换其值。 任何人都可以提出更好的选择吗? 最佳答案 我推荐 表格
我向用户发送了注册电子邮件,当他输入密码和其他详细信息时,我试图重置密码,但它抛出错误 uncaught error extpected to find a document to change 正如
我运行排行榜示例。然后我更改了 leaderboard.js 中的 names 变量(Meteor.startup 函数参数初始化的一部分)中的科学家条目之一并保存了文件。 我应该期待 meteor
我有一个 meteor 1.0 应用程序。我添加了一堆包,例如:meteor add kevohagan:ramda .但我在任何地方都找不到它。我什至无法在我的系统上找到它。 在我的项目中: $>
我有一个 meteor 移动应用程序在结构上工作;我真的需要将 View 与一些页面转换拼接在一起。 我看了iron-transitioner项目,但看起来开发已经停止? (最后一次提交 6 个月前,
我在“发现 meteor ”一书之后构建了我的第一个 meteor 添加。 但是我现在遇到了以下错误: 错误:在ian:accounts-ui-bootstrap-3 中没有找到accounts_ui
是否可以在负载均衡器后面使用 Mongodb 运行 meteor 应用程序的多个实例? 似乎如果一个应用程序的多个实例在不同的服务器上运行,那么它们就不会知道其他实例对 Mongo DB 所做的更改
我在/client/main.coffee 中的新客户端代码 Xingyun = Meteor.connect "localhost:3000" System = new Meteor.Collect
在 Meteor.publish ,使用 this.error 有什么区别并简单地抛出 Meteor.Error ? 最佳答案 this.error仅在发布方法内可用。每 the docs : Sto
假设我想在 Meteor 的后端使用与 Mongo 不同的数据库,并且还想在前端使用像 D3.js 这样的可视化库。 目前有可能吗? 如果不是我自己添加它会有多复杂? 谢谢 最佳答案 https://
我已经在 Meteor 中制作了一个 watch-as-I-type 实时聊天服务,但是我在 Meteor 中的内置元素保存功能方面遇到了麻烦。基本上,当输入的文本具有焦点时,我需要不更新当前的聊天消
我想知道 Meteor 是否可以与我的用例一起使用。 我有一个可在 App Store 上使用的移动应用程序。这个应用程序包含一个小调查,用户将在没有互联网连接的情况下做出回应。然后用户将关闭应用程序
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 8年前关闭。 Improve this q
我是一名优秀的程序员,十分优秀!