【发布时间】:2018-04-05 17:18:33
【问题描述】:
我正在创建一个服务器端渲染的 React 应用程序,它使用 Redux 并从 Wordpress 安装中获取内容(通过 WP API)。请考虑以下减速器:
const initState = {
mainMenu: null,
userMenu: null
}
export default ( state = initState, action ) => {
switch( action.type ) {
case 'FETCH_MAIN_MENU':
state = {
...state,
mainMenu: action.payload.data
}
case 'FETCH_USER_MENU':
state = {
...state,
userMenu: action.payload.data
}
default:
return state;
}
}
这两个动作都在服务器端调度,在应用程序第一次渲染之前,这两个动作都是返回两个不同菜单的承诺。问题是有时FETCH_USER_MENU 的有效负载实际上与FETCH_MAIN_MENU 的有效负载相同。据推测,当FETCH_USER_MENU 发出的承诺解析太慢时会发生这种情况,因此action.payload.data 采用FETCH_MAIN_MENU 情况下分配给它的值。我很确定这是怎么回事,因为如果我将 action.payload.data 任意设置为 null,则根本不会呈现用户菜单(同样,只是有时):
const initState = {
mainMenu: null,
userMenu: null
}
export default ( state = initState, action ) => {
switch( action.type ) {
case 'FETCH_MAIN_MENU':
state = {
...state,
mainMenu: action.payload.data
}
action.payload.data = null;
case 'FETCH_USER_MENU':
state = {
...state,
userMenu: action.payload.data // Sometimes results as null
}
default:
return state;
}
}
除了为每个菜单创建不同的 reducer 之外,您能否提出一个解决方案,而我想避免这种情况?
【问题讨论】:
标签: javascript reactjs redux