React / Flux - 保持状态属性的组织?

时间:2015-07-17 17:56:44

标签: javascript reactjs flux

在react / flux中响应触发器操作似乎很常见,触发器操作会在您的状态数据上设置特定的状态属性,以便组件通过呈现此对象来做出反应。

简单示例:用户点击"完成"在待办事项列表项组件上的按钮,它会触发在商店中该项目上设置complete: true的操作,该组件会重新呈现并对该项目做出反应。#34;完成"通过呈现友好的复选标记来显示status属性。

不那么简单的示例:应用程序开始从您的API加载数据集合,因此您使用loading: true初始化商店,并且您的组件通过呈现微调器来做出反应。加载完成后,操作会设置loading: false,因此组件将继续并呈现项目......但如果出现错误,操作也会触发error: true提示组件呈现某些内容红色警告文本。现在你有两个需要管理的切换,如果再给它一个,则取消设置错误标志等等。

真的不是那么简单的例子:用户点击"编辑"待办事项列表项上的按钮,因此您在该项目上设置editing: true,以便组件呈现表单而不是显示。然后,用户点击提交按钮。现在,您已获得editing: truesubmitting: true,以防您在更新过程中阻止双重提交。然后,如果出现错误,您需要关闭submitting,但保持editing为真并添加带有消息的error标记,现在如果用户只是导航离开你必须清理的所有页面......

那么......我们如何保持所有这些东西的理智?是否一致?可读?这种状态数据是否有模式/约定/实用程序?我们如何将所有这些状态标志与我们的实际数据分开 - 我们加载的东西,可能想要提交回API,而不必丢弃我们所添加的所有这些额外信息?

也许这一切都归结为编写干净的代码,但似乎可能有更多的领域要感谢我了解...

1 个答案:

答案 0 :(得分:0)

我建议使用var Status = { LOADING: 1, EDITING: 2 };字段,而不是使用标记(布尔值)。然后,您可以使用常量为该字段赋值。有点像...

等等。在您可能同时拥有多个状态的情况下(现在无法提供一个不错的示例),您可以使用JS'Bitwise操作。

Status = { LOADING: 1, EDITING: 2, SUBMITTING: 4, SOMETHING_ELSE: 8 }; // Let's say I'm loading and doing something_else var currentStatus = Status.LOADING + Status.SOMETHING_ELSE; // Am I editing? console.log(Status.EDITING & currentStatus); // 0, so no // Am I doing something_else? console.log(Status.SOMETHING_ELSE & currentStatus); // non-zero? Then true

{{1}}