我正在努力完成以下任务:
我的架构当前在初始请求上执行服务器端呈现,并解析所有承诺,以便在数据返回客户端之前用数据填充商店。
现在完美无缺,客户端会收到一个已填充的商店和视图。但它再一次(冗余地)触发了行动
我理想的情况是服务器端渲染会为结果添加一个属性:"已解决:true"因此,您知道初始请求来自服务器,您可以删除冗余操作,将属性设置为false并通过中间件返回该状态。
目前我添加了该属性:
{
resolved: true,
data: […]
}
我的中间件然后需要检查故事当前是否有此操作的数据,如果是,则不再执行操作并将resolve设置为false,因此下次到达此路由时,它将重新加载异步数据。
return (store) => (next) => (action) => {
// check if action data is already on store
// check if resolved property is true?
return next(action);
}
我在考虑使用redux中间件。但是我无法确定我的操作的返回数据将在商店中映射到什么,因为减速器负责这个。
但是我不相信中间件技术会起作用。
关于如何解决这个问题的任何想法?
答案 0 :(得分:2)
如果您真的想在中间件中执行此操作,可以使用如下所示的store参数,但我建议您在操作创建者中进行检查。
return store => next => action => {
state = store.getState(); // current state
if (state.resolved) {
return next(action);
}
// do loading
next(action);
};
我强烈建议您查看Redux real-world示例;特别是middleware api和action creators。你会在动作创建者中看到他在取出之前做了一些基本的状态检查。