我正在使用Redux编写NodeJS应用程序。我有兴趣允许用户通过在运行时指定它来动态加载中间件。
如何动态更新正在运行的Redux应用程序的中间件以添加或删除中间件?
答案 0 :(得分:7)
中间件不是一些单独的扩展,它是您的商店 的一部分。在运行时交换它可能会导致不一致。如果您不知道他们将要运行哪些中间件,您如何推理自己的行为? (请记住,中间件不必同步操作。)
你可以尝试如下的天真实现:
const middlewares = [];
const middlewareMiddleware = store => next => act => {
const nextMiddleware = remaining => action => remaining.length
? remaining[0](store)(nextMiddleware(remaining.slice(1)))(action)
: next(action);
nextMiddleware(middlewares)(act);
};
// ... now add/remove middlewares to/from the array at runtime as you wish
但请注意中间件合同,尤其是next
参数。每个中间件都会收到"传递给下一个中间件" 功能,作为其构建的一部分。即使您动态应用中间件,您仍然需要告诉他们如何将结果传递给下一个中间件。现在您面临亏损选择:
通过坚持使用静态中间件来完全避免这些问题可能是一个好主意。
答案 1 :(得分:2)
使用redux-dynamic-middlewares
答案 2 :(得分:-1)
尝试即时更改中间件会违反纯粹的'动作和减速器功能,因为它引入了副作用。生成的应用程序很难进行单元测试。
在我的脑海中,可能创建多个商店(每个可能的中间件配置一个),并使用父商店提供它们之间的状态切换。您在切换时在子存储之间移动数据。警告:我没有看到这样做,并且可能有充分的理由不这样做。