javascript - 操作有效负载被使用两次 (Redux)

标签 javascript reactjs redux

我正在创建一个服务器端渲染的 React 应用程序,该应用程序使用 Redux 并从 Wordpress 安装中获取内容(通过 WP API)。请考虑以下 reducer :

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; 

    }

}

这两个操作都是在第一次呈现应用程序之前在服务器端分派(dispatch)的,并且这两个操作都是返回两个不同菜单的 promise 。问题在于,有时 FETCH_USER_MENU 的有效负载实际上与 FETCH_MAIN_MENU 的有效负载相同。据推测,当 FETCH_USER_MENU 发出的 Promise 解析速度太慢时,就会发生这种情况,因此 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 (我想避免这种情况)之外,您还能建议一个解决方案吗?

最佳答案

该问题是由 Switch case fallthrough 引起的,因为您没有从 case 语句返回,也没有使用 break。理想情况下,使用 redux,您需要返回更新后的状态。你会写

export default ( state = initState, action ) => {

    switch( action.type ) {

        case 'FETCH_MAIN_MENU':
            return {
                ...state, 
                mainMenu: action.payload.data
            }           

        case 'FETCH_USER_MENU':
            return  {
                ...state, 
                userMenu: action.payload.data
            }                   

        default: 
            return state; 

    }

}

关于javascript - 操作有效负载被使用两次 (Redux),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49668533/

相关文章:

javascript - Redux 在组件之间共享 Action

javascript - Bootstrap 3 弹出窗口滚动不起作用

javascript - 只将单个元素插入数组

javascript - 如何在 Javascript 中调用一个类本身而不是它的实例?

reactjs - 在Remix中使用chartjs和react-chartjs-2会出现错误 "react-chartjs-2"在你的node_modules中找不到

javascript - Jest 测试失败

javascript - 如何将 api 调用包装器从 redux thunk 迁移到 redux saga

angular - ngrx 和 ngxs 之间的性能差异?

javascript - 关闭键盘 React-Native

javascript - jQuery 的 div 调整大小问题