2017-03-03 54 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