Flux:中间错误应该存储在哪里?

Posted

技术标签:

【中文标题】Flux:中间错误应该存储在哪里?【英文标题】:Flux: Where should the intermediate, errors be stored? 【发布时间】:2014-11-12 09:22:36 【问题描述】:

Flux 文档指出状态应该存储在 Stores 中。然后应该将与实体相关的加载、保存、错误消息存储在 Stores 中。由于 View 将从 Store 获取其初始状态,因此只有知道其加载/保存是否来自 Store 的方法。

此外,当编辑表单时,用户决定取消编辑,因此这些中间表单值应该存储在 Views 状态中,而不是发送到 Store?

【问题讨论】:

【参考方案1】:

您的输入字段应该有自己的记忆。这意味着 Store 状态(事实来源)与组件中发生的任何更改都是不可改变的。通过操作,这些更改将传达给商店。无论它们成为新的事实还是因错误而失败,Store 状态都将再次不变地复制到组件输入状态。错误,我也会转移到组件,因为它们适用于输入状态,而不是存储状态。

商店就像数据库,您也很少在其中放置任何临时记录或错误。除非您正在编写一个跟踪输入历史记录的文本编辑器...

【讨论】:

但是错误/加载需要正确存储在存储中,因为视图会监听存储更新。有没有其他方法可以将操作错误结果传达回 View? 您的商店是否有能力通过附加参数触发? Reflux.js 具有这种能力,因此不需要存储错误,它们只是在触发时传递。 我正在使用默认的通量实现。为错误发出不同的事件是可行的。然后我需要确保错误属于特定组件。 如果您的模型支持错误,那么您就不必担心哪些组件会出现哪些错误。 模型 出错。基本上我会那样做。 模型是一个 json 对象。所以我只是添加一个错误属性。谢谢您的帮助。除非我以后遇到任何问题,否则我会那样做。【参考方案2】:

我以一种非常实用的方式使用 React,因为我的所有数据都作为全局 JSON 对象存储在 React 之外,并且这些数据被注入到***组件中。因此,React 对我来说只是一个聪明的模板引擎:将 JSON 转换为 Virtual DOM,然后将 Virtual DOM 应用到真实 DOM。渲染总是从主要组件触发,并且由于不变性而得到优化。 Read more here

我不同意 Rygu,错误是状态的一部分。商店可能类似于数据库,但这意味着什么?商店应该只包含一些不是“临时”或可能被认为没有意义的东西?

对我来说,如果你想使用 React 进行函数式编程,那么任何显示为 DOM 的东西都应该首先作为组件的 props 传递,包括错误。如果您不这样做,那么您将依赖副作用来管理 DOM,并且随着时间的推移,将难以推理所有这些副作用。

【讨论】:

atom-react 和 react-cursor 相似吗?我想要更多关于如何使用 atom-react 的文档/示例。 我以前不知道 react-cursors。是的,它非常相似,只是 react-cursors 似乎与 React 高度耦合,并且似乎将整个应用程序状态置于根组件状态中,而 atom-react 具有解耦的 atom/cursor 实现。 Atom-React 是一种粘合剂,它允许将原子状态连接到 React 渲染管道 + 事件总线 + 一种管理状态的自以为是的方式。我会尽快写文档和示例,但我们目前正处于创业热潮中:) 我喜欢你的想法。期待更多文档。

以上是关于Flux:中间错误应该存储在哪里?的主要内容,如果未能解决你的问题,请参考以下文章

Flux 应用程序中的缓存逻辑应该放在哪里?

Flux/Alt Basic 异步示例抛出“无法在调度中间调度”

在 React Flux 上,我应该在哪里填充我的 Store 的初始状态?

返回 Mono 和 Flux 错误总是返回 500

React.js & Flux - 在哪里注册 Websocket 事件(接收数据)的最佳位置

用于登录或基本上大多数表单处理的 Flux 架构