Redux:调度不影响状态的操作

时间:2018-07-23 08:04:37

标签: reactjs redux react-redux

我们在中间件中处理副作用,而不是在reducer中处理副作用,这意味着我们始终需要调度一个操作来处​​理副作用。 您认为派发不更改状态的操作进行API调用是否合适?我一直避免这样做,因为Action代表更改{{1} },以我的理解。

2 个答案:

答案 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..');
                });
    }
}