2017-10-14 14 views
0

サンクの始めに、私は「START」アクションをディスパッチしてから、いくつかの非同期のものを待って、最後に「SUCCESS」アクションをディスパッチします。ディスパッチされたアクションからサンクを中止できますか?

時には、このサンクが前回の終了(成功アクション)の前に再びディスパッチされることがあるので、2回目のSTARTアクションが拒否され、サンクが非同期のものとENDアクションを続行しないようにします。

私のアプローチは、ディスパッチされたアクションがすでにディスパッチされている(前回のアクションは現行と同じです)場合、ミドルウェアをチェックすることですが、私はサンクから拒否されたアクションの後、素敵な方法。

は現在、私は、ミドルウェアからfalseを返し、発送から返された値をチェックする必要があります。

export const doSomething =() => async (dispatch, getState) => { 

    if(!dispatch({type: 'START'})) return; 

    //...async stuff 

    dispatch({type: 'SUCCESS'}); 
} 

これを1点(ミドルウェア)から制御する方法はありますか?

答えて

0

これらのアクション(STARTSUCCESS、...)に従ってストア状態を変更するレデューサーがあるとします。

function (state = {}, action) { 
    if (action.type === 'START') { 
    return {...state , isLoading: true }; 
    } 

    if (action.type === 'SUCCESS') { 
    return {...state , isLoading: false }; 
    } 
    return state; 
} 
:減速は、以下のような何かをしたと仮定し

export const doSomething =() => async (dispatch, getState) => { 

    if (getState().isLoading) return ; // <-- ⚠️ ⚠️ ⚠️ 

    if(!dispatch({type: 'START'})) return; 

    //...async stuff 

    dispatch({type: 'SUCCESS'}); 
} 

もしそうなら、あなたは派遣を決定する前に、ストアの状態をチェックする必要が

関連する問題