Javascript Redux中间件在next()之前更改状态

Javascript Redux中间件在next()之前更改状态,javascript,redux,middleware,react-redux,Javascript,Redux,Middleware,React Redux,我想在调用next()之前修改状态,以便在中间件获得新状态后应用的每个reducer可能吗?怎么做? 我脑海中唯一的想法是非常粗糙的,可能是这样的: export const myMiddleware = (store) => (next) => (action) => { const oldReducer = ???? store.replaceReducer(myReducer); store.dispatch(action); const

我想在调用
next()
之前修改状态,以便在中间件获得新状态后应用的每个reducer可能吗?怎么做?

我脑海中唯一的想法是非常粗糙的,可能是这样的:

export const myMiddleware = (store) => (next) => (action) => {
    const oldReducer = ????
    store.replaceReducer(myReducer);
    store.dispatch(action);
    const newState = store.getState();
    store.replaceReducer(oldReducer);
    return next(newState);
}
由于我还没有看到任何方法来获取当前减速机,因此应该以任何方式将其提供给中间件:

export const myMiddleware = (oldReducer) => (store) => (next) => (action) => {
   ...
}

const store = createStore(originalReducer, applyMiddleware(myMiddleware(originalReducer)));
这似乎更骇人

主要目的是构建一个包,该包映射存储区
状态中的操作对象(
action.payload
)和路径(
action.meta
)。在这个场景中,减速器分布在一个npm包中,因此它应该以某种方式“链接”。所以现在减速器正在检测有效负载中是否有路径和对象,并尝试从中减少新状态


最糟糕的解决方案是在减速器内的任何其他操作之前,指示用户从自己的减速器调用减速器。这不是一个固定的模式。所以一开始,我想用一个尽可能不可知的中间件来自动完成工作。这就是为什么如果可能的话,我会尝试从中间件中修改状态。

您可能不想从中间件中调用单个还原程序。听起来你在把应该是多个连续动作的东西浓缩成一个动作,而这正是导致你出现问题的原因。如果你使用类似的方法来管理行动链,你很可能很容易就能完成你想要的

下面是使用redux传奇管理一系列操作的基本示例:

import { takeEvery } from 'redux-saga'
import { put } from 'redux-saga/effects'

export function * watchForSomeAction () {
  // Every time SOME_ACTION is dispatched, doSomethingElse() will be called
  // with the action as its argument
  yield * takeEvery('SOME_ACTION', doSomethingElse)
}

export function * doSomethingElse (action) {
  // put() is redux-saga's way of dispatching actions
  yield put({ type: 'ANOTHER_ACTION', payload: action.payload })
}

本例只监视
某些\u操作
,当它发生时,它会分派
另一个\u操作
。通过这样的方式,您可以确保
另一个\u操作
的还原程序正在处理由
某些\u操作
的还原程序产生的新状态。

谢谢,我面临的情况是,我正在构建一个包,该包映射一个操作对象(
负载
)和一个路径(
操作.meta
)在
不可变的js
状态下
。在这个场景中,减速器分布在一个包中,因此它应该以某种方式“链接”。起初我以为我是在用尽可能多的不可知论的中间件思考。所以,这就是为什么我试图修改中间件的状态,如果可能的话。啊,好的。那么,从中间件内部简单地调度一个操作是否有意义呢?您的包用户必须将您的包的reducer添加到他们的combinereducer(),但这对于修改状态的包来说是正常的。还是我误解了你的目标?你是对的,这不是目标。如果用户添加包reducer,它将无法修改整个reducer,其目的是:构造一个helper函数,在用户继续操作之前修改用户状态。将是一种
express node.js
中间件,在下一个中间件/用户函数之前解析参数。抱歉,我仍然不理解。你能提供一个你想要的API和想要的结果的例子吗?好的,现在我可以发送我想要实现的链接:我也会在redux repo中询问,因为我一直在查看redux代码,现在似乎没有解决方案