2017-03-03 55 views
2

我想知道如何標誌REDX行動不派遣第二次。如何強制執行redux動作只調度一次?

let triggerOnce = false; 

export function populateStore() { 
    return (dispatch) => { 
    if (triggerOnce) return; 

    dispatch({ 
     type: ReviewActions.UPDATE_REVIEW_STATE, 
     data: review, 
    }); 

    triggerOnce = true; 
    }; 
} 

正如您現在可以看到的,我正在使用外部變量來標記......這並不是那麼好。想知道是否有更好的方法。感謝您的任何建議堆

+0

什麼分派'populateStore'? 'triggerOnce'可能應該存儲在狀態中,以便可以進行反序列化。無論調用「populateStore」在調度之前都可以檢查該標誌。 – CodingIntrigue

+0

@CodingIntrigue這是一個好主意 – Bruce

回答

1

我不完全確定您的上下文,所以我道歉,如果我錯了。我試圖找到一種方法來只調用一次操作,而不是在全局範圍內設置一個標誌。如果這不合乎要求,您可以在減速器中設置一個標誌,該標誌一旦被填充就設置爲true

const initialState = { 
    hasBeenSet: false, 
    ...restOfState, 
} 

const events = { 
    [UPDATE_REVIEW_STATE]: (state) => { 
    const { hasBeenSet } = state; 

    return hasBeenSet ? state : { ...state, hasBeenSet: true }; 
    }, 
}; 

我希望有幫助!

+1

thx好友爲您的建議 – Bruce