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