我们在中间件中处理副作用,而不是在reducer中处理副作用,这意味着我们始终需要调度一个操作来处理副作用。 您认为派发不更改状态的操作进行API调用是否合适?我一直避免这样做,因为Action
代表更改{{1} },以我的理解。
答案 0 :(得分:0)
我也在您的项目中处理它,就像您描述的一样(仅分派动作,这些动作会改变状态,但会对api调用产生副作用)。
这样做有什么问题,但是您的状态中还有其他属性SELECT T1.flow
FROM #allflows T1 INNER JOIN
#allflows T2
ON t2.flow like t1.flow + '%'
和loading
?
因此,在用于初始Action的化简函数中,只需设置loaded
并触发副作用。
在loading = true
的化简函数中,您可以这样设置状态:
Success Action
这还具有以下优点:如果您的休息呼叫需要一段时间,则可以轻松显示加载指示器。
答案 1 :(得分:0)
您可以使用动作生成器,它们可以根据您的需要分配动作,也可以不分配动作
这是一个操作生成器,用于在没有在服务器上找到的情况下从存储中删除库项目
export const startRemoveLibraryItem = (libraryItemId) => {
return (dispatch) => {
return database.ref(`library/libraryItems/${libraryItemId}`)
.then((snap) => {
// if item found on server I am going to dispatch a action now
if(snap.val() == something)
dispatch(removeLibraryItem(libraryItemId));
})
.catch((e) => {
// item some error do not do anything
console.log('Error in removing Library Item..');
});
}
}