在react / flux中响应触发器操作似乎很常见,触发器操作会在您的状态数据上设置特定的状态属性,以便组件通过呈现此对象来做出反应。
简单示例:用户点击"完成"在待办事项列表项组件上的按钮,它会触发在商店中该项目上设置complete: true
的操作,该组件会重新呈现并对该项目做出反应。#34;完成"通过呈现友好的复选标记来显示status属性。
不那么简单的示例:应用程序开始从您的API加载数据集合,因此您使用loading: true
初始化商店,并且您的组件通过呈现微调器来做出反应。加载完成后,操作会设置loading: false
,因此组件将继续并呈现项目......但如果出现错误,操作也会触发error: true
提示组件呈现某些内容红色警告文本。现在你有两个需要管理的切换,如果再给它一个,则取消设置错误标志等等。
真的不是那么简单的例子:用户点击"编辑"待办事项列表项上的按钮,因此您在该项目上设置editing: true
,以便组件呈现表单而不是显示。然后,用户点击提交按钮。现在,您已获得editing: true
和submitting: true
,以防您在更新过程中阻止双重提交。然后,如果出现错误,您需要关闭submitting
,但保持editing
为真并添加带有消息的error
标记,现在如果用户只是导航离开你必须清理的所有页面......
那么......我们如何保持所有这些东西的理智?是否一致?可读?这种状态数据是否有模式/约定/实用程序?我们如何将所有这些状态标志与我们的实际数据分开 - 我们加载的东西,可能想要提交回API,而不必丢弃我们所添加的所有这些额外信息?
也许这一切都归结为编写干净的代码,但似乎可能有更多的领域要感谢我了解...
答案 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}}