Redux中间件不发送新操作

Redux中间件不发送新操作,redux,Redux,我正在创建一个Redux中间件,用于侦听特定操作。如果该动作类型与我要查找的动作类型匹配,我想发送另一个动作。这是因为我有一些共享功能的不同组件,所以我想更新操作,使其具有类似的类型,但不同的有效负载,例如: const updateActions = store => next => action => { console.log(action); if (action.type === 'UNIQUE_ACTION_A') { return

我正在创建一个Redux中间件,用于侦听特定操作。如果该动作类型与我要查找的动作类型匹配,我想发送另一个动作。这是因为我有一些共享功能的不同组件,所以我想更新操作,使其具有类似的类型,但不同的有效负载,例如:

const updateActions = store => next => action => {
    console.log(action);
    if (action.type === 'UNIQUE_ACTION_A') {
        return next({ type: 'NEW_ACTION', term: 'new_action_a_test' });
    } else if (action.type === 'UNIQUE_ACTION_B') {
        return next({
            type: 'NEW_ACTION',
            term: 'new_action_b_test'
        });
    }
    return next(action);
};

const store = createStore(
    rootReducer,
    composeWithDevTools(applyMiddleware(thunk, updateActions))
);

我遇到的问题是,这些操作没有被调度。当I console.log所有操作时,它们将继续正常运行,而不是分派新操作。这就好像发送这些操作的调用被忽略了一样。我在这里做错了什么?谢谢

中间件内部的next和dispatch之间存在差异。dispatch将一个操作发送到dispatch链的最开始,这将导致它在管道中的所有中间件中运行。next将其发送到该中间件之后的下一个中间件,并最终发送到还原器。通过调用next{type:NEW_ACTION},您将它发送到下一个中间件,而这个中间件将永远不会看到新的_ACTION


另请参见。

顶部有console.log吗?@Krasimir有。它会记录每一个动作,所以我发现它忽略了我想要发送的动作。我不认为你会看到新动作被注销,因为这不是通过相同的功能。它被送到减速器。你能试着把console.log放到你的reducer中,看看你是否得到了新的动作而不是独特的动作,例如。谢谢。我更新为使用store.dispatch{type:'NEW_ACTION',term:'NEW_ACTION_a_test'},而不是next,但得到了一个未捕获的RangeError:最大调用堆栈大小超过了错误,因为它产生了无限循环。有没有一种方法可以在不陷入无限循环的情况下使用dispatch?您的逻辑一定有问题,因此您总是在调度这个新操作,而不是仅有条件地进行调度。您需要修正您的逻辑,使其仅在某些条件下发送新操作,并且这些条件不会重复。是的!你说得对。我的工作代码库的逻辑中有一个问题,上面的示例中没有。我正在检查动作类型并将其设置为相同,这将导致循环。基于上面的示例,它不会运行到循环中,因为它在匹配一次后将类型设置为不同。谢谢你,马克!