让我们说我的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
。MIC_ENABLED
。state.micEnabled
。好的,这很有道理。问题在于,在我的行动中,我还有很多共同的行动和#34;调度为reducers以更新状态(例如TOGGLE_FILTER
):
TOGGLE_FILTER
。state.filterEnabled
。因此,ENABLE_MIC
和TOGGLE_FILTER
代表"命令"或者"请求",但只有其中一个(TOGGLE_FILTER
)被reducer用来更新状态。在另一方面,reducer还会监听MIC_ENABLED
操作(这不是"命令"或"请求"但已发生的事件或事件)。
那么,有没有建议在可理解的情况下命名这些类型的Redux操作,通过查看我所有Redux操作的名称,我可以很容易地知道哪些更新状态以及哪些只是发送另一个操作?
答案 0 :(得分:1)
将其视为一个AJAX请求并将其称为ENABLE_MIC_REQUEST
,这可能会导致ENABLE_MIC_SUCCESS
或ENABLE_MIC_FAILURE
(如果您的方案中可以这样做)。您可以使用thunk来覆盖一个动作创建者中的所有内容,名称类似于enableMic
。这应该是相当透明的。
然后只有ENABLE_MIC_SUCCESS
会在减速器中翻转micEnabled
。我建议将其重命名为isMicEnabled
btw,以使其非常清楚它是一个布尔标志。
处理ENABLE_MIC_FAILURE
时,您可以显示错误消息,或在您的应用中执行任何适当的操作。