React(Redux):检查是否已执行操作(服务器端渲染)

时间:2015-12-09 14:16:16

标签: reactjs redux

我正在努力完成以下任务:

我的架构当前在初始请求上执行服务器端呈现,并解析所有承诺,以便在数据返回客户端之前用数据填充商店。

现在完美无缺,客户端会收到一个已填充的商店和视图。但它再一次(冗余地)触发了行动

我理想的情况是服务器端渲染会为结果添加一个属性:"已解决: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中间件。但是我无法确定我的操作的返回数据将在商店中映射到什么,因为减速器负责这个。

但是我不相信中间件技术会起作用。

关于如何解决这个问题的任何想法?

1 个答案:

答案 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 apiaction creators。你会在动作创建者中看到他在取出之前做了一些基本的状态检查。