【问题标题】:Do I always need to return a value from a redux middleware?我是否总是需要从 redux 中间件返回一个值?
【发布时间】:2017-08-30 15:16:27
【问题描述】:
在redux docs 中给出的示例中,似乎总是有一些东西从中间件返回。但是,当我致电 next(action) 并没有返回任何内容时,一切似乎都正常。
在redux source 中,它似乎在每个中间件的返回值上调用dispatch。
这让我相信它提供了一种在所有中间件都运行后运行调度的可选方式。
有人可以确认我们是否必须始终从中间件返回一个值,如果是,为什么?
【问题讨论】:
标签:
javascript
reactjs
redux
react-redux
【解决方案1】:
我其实是tweeted about this just the other day。
store.dispatch() 方法默认返回传入的操作。由于中间件管道环绕 dispatch(),每个中间件可以在传入的过程中更改通过管道传递的值,并将返回值更改为传回来了。
许多中间件依赖于能够自己返回一个值,或者使用返回的返回值。例如,redux-thunk 返回您从 thunk 函数返回的任何内容,这通常用于能够从 thunk 返回一个承诺,以便您可以链接 dispatch(somePromiseThunk()).then( () => {})。
如果中间件调用 next(action) 但实际上并未从 next() 返回值,则可能会破坏这些功能。具体行为取决于您设置了哪些中间件,以及如何订购它们。
因此,“正确”的做法是每个 Redux 中间件应该默认return next(action),除非它明确想要更改返回值行为。这确保了最佳的兼容性和将中间件组合在一起的能力。