Redux操作的命名约定,用于区分请求和模型更新

时间:2017-08-19 13:02:06

标签: redux

让我们说我的Redux全球状态如下:

{
    micEnabled    : Boolean,
    filterEnabled : Boolean
}

React组件具有"启用麦克风"单击后,按钮应执行异步操作(可能需要一段时间)并使用Promise解析。为了运行这样的异步操作,我可以将自定义Redux中间件添加到商店中,或者可以使用redux-thunk等。这不是问题。

这里是我的问题:哪一个应该是在#34; Enable Mic"上启用的Redux操作的名称。点击?

当没有涉及异步内容时,将Redux操作命名为" setter" (SET_CURRENT_TIME)或表达式操作(TOGGLE_FILTER)将由reducer直接用于更新状态。因此,我可以为上面的用例建议ENABLE_MIC,但事实是这样的操作(让我们说"操作1")不应该直接更新state.micEnabled

相反,我的Redux中间件将拦截操作1(ENABLE_MIC),运行异步操作,一旦解决,再调度另一个Redux操作("操作2"),这样相应的reducer将会更新state.micEnabled。所以"行动2"可能是MIC_ENABLED

总结:

  • 点击按钮发送ENABLE_MIC
  • Redux中间件拦截它并执行异步操作。
  • 已解决,中间件调度MIC_ENABLED
  • Reducer更新state.micEnabled

好的,这很有道理。问题在于,在我的行动中,我还有很多共同的行动和#34;调度为reducers以更新状态(例如TOGGLE_FILTER):

  • 点击复选框发送TOGGLE_FILTER
  • Reducer更新state.filterEnabled

因此,ENABLE_MICTOGGLE_FILTER代表"命令"或者"请求",但只有其中一个(TOGGLE_FILTER)被reducer用来更新状态。在另一方面,reducer还会监听MIC_ENABLED操作(这不是"命令"或"请求"但已发生的事件或事件)。

那么,有没有建议在可理解的情况下命名这些类型的Redux操作,通过查看我所有Redux操作的名称,我可以很容易地知道哪些更新状态以及哪些只是发送另一个操作?

1 个答案:

答案 0 :(得分:1)

将其视为一个AJAX请求并将其称为ENABLE_MIC_REQUEST,这可能会导致ENABLE_MIC_SUCCESSENABLE_MIC_FAILURE(如果您的方案中可以这样做)。您可以使用thunk来覆盖一个动作创建者中的所有内容,名称类似于enableMic。这应该是相当透明的。

然后只有ENABLE_MIC_SUCCESS会在减速器中翻转micEnabled。我建议将其重命名为isMicEnabled btw,以使其非常清楚它是一个布尔标志。

处理ENABLE_MIC_FAILURE时,您可以显示错误消息,或在您的应用中执行任何适当的操作。