Javascript 操作负载被使用了两次(Redux)

Javascript 操作负载被使用了两次(Redux),javascript,reactjs,redux,Javascript,Reactjs,Redux,我正在创建一个服务器端呈现的React应用程序,它使用Redux并从Wordpress安装中获取内容(通过WP API)。请考虑以下减速器: const initState = { mainMenu: null, userMenu: null } export default ( state = initState, action ) => { switch( action.type ) { case 'FETCH_MAIN_MENU':

我正在创建一个服务器端呈现的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\u USER\u MENU
的负载有时实际上与
FETCH\u MAIN\u MENU
的负载相同。当
FETCH\u USER\u MENU
发出的承诺解析得太慢,从而
action.payload.data
获取在
FETCH\u MAIN\u 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; 

    }

}

除了为每个菜单创建一个不同的减速机之外,您能推荐一个解决方案吗

该问题是由
切换案例故障造成的,因为没有从案例语句返回,也没有使用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; 

    }

}

该问题是由
切换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; 

    }

}

令人惊叹的!谢谢。很高兴能帮助我们!谢谢。很高兴能帮上忙