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

Reactjs Redux:调度不影响状态的操作,reactjs,redux,react-redux,Reactjs,Redux,React Redux,我们在中间件中处理副作用,而不是在还原器中,这意味着我们总是需要调度一个操作来处理副作用您认为分派一个不改变状态的操作来进行API调用合适吗?我一直避免使用它,因为在我的理解中,action代表改变状态。我也在我的项目中处理它,就像您描述的那样(仅调度操作,这些操作正在更改状态,但也会对api调用产生副作用) 这样做有什么错,但是在您的状态中有附加属性加载和加载 因此,在初始操作的reducer函数中,您只需设置load=true并触发副作用 在成功操作的reducer函数中可以如下设置您的状态

我们在中间件中处理副作用,而不是在还原器中,这意味着我们总是需要调度一个操作来处理副作用您认为分派一个不改变状态的操作来进行API调用合适吗?我一直避免使用它,因为在我的理解中,
action
代表改变
状态。

我也在我的项目中处理它,就像您描述的那样(仅调度操作,这些操作正在更改状态,但也会对api调用产生副作用)

这样做有什么错,但是在您的状态中有附加属性
加载
加载

因此,在初始操作的reducer函数中,您只需设置
load=true
并触发副作用

成功操作的reducer函数中
可以如下设置您的状态:

return {
  ...state,
  data: action.payload,
  loading: false,
  loaded: true
};

这还有一个优点,即如果rest调用需要一段时间,您可以轻松显示加载指示器。

您可以使用动作生成器,它可以根据需要调度动作,也可以不调度动作

这是一个操作生成器,用于从存储中删除库项,条件是如果在服务器上找到该库项,则不会删除该库项

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

你可以使用action Generator的概念,我确实有
加载
加载
状态。但在某些情况下,如果不需要显示UI,我们就不需要状态。而且,由于所有逻辑都位于我的中间件中,例如redux saga,我想知道是否可以仅为运行那些中间件而调度操作阿瑞斯。那么我会说这取决于你的个人偏好,但还有什么选择呢?你如何在不发送初始的
请求\u动作的情况下触发副作用呢?我创建了一个函数并在组件中调用它,在中间件中也使用了这个函数。是的,我们可以使用动作创建者,但我不使用redux thunk。我愿意相反,要注意处理副作用的操作。所有处理副作用的逻辑都在中间件中。你说的副作用是什么意思?对我来说,它在reactWell中是一个相当新的术语。它可以是很多事情,比如进行AJAX调用,在localStorage中存储数据。不保证返回给定输入的相同输出的事情。那些在我看来,你可以为你的工作使用行动。你可以在那里做各种各样的副作用,并分派空的行动或未知的行动。行动意味着为一些刺激做一些行动,所以我相信它不会违反任何定义。