Запрет отправки в функции тайм-аута - PullRequest
1 голос
/ 02 июля 2019

В настоящее время я создаю компонент реагирования на уведомления и пытаюсь выяснить логику его закрытия / автоматического закрытия по истечении заданного периода времени.

По существу - после отображения уведомления запускается функция autoCloseAction(). Если через 5 секунд пользователь завис в уведомлении, closeAction() не вызывается.

Однако, это не так твердо, как я надеялся. Пользователь должен находиться на отметке 5 секунд для closeAction dispatch. Что имеет смысл, когда вы смотрите на код.

Также - Если уведомление принудительно закрыто, нажав кнопку «x» - Тайм-аут все еще продолжается. Поэтому, если пользователь достаточно быстр, чтобы открыть другое уведомление, он может закрыться почти сразу после истечения времени ожидания.

Так что я думаю, что я ищу способ отменить мои рассылки или переопределить мои рассылки, чтобы предотвратить столкновения.

Любая помощь была бы очень полезна, поскольку я изо всех сил стараюсь обернуть голову вокруг этого сценария, в частности!

Большое спасибо!

export function openAction() {
    return dispatch => {
        dispatch([{ type: OPEN }, autoCloseAction()]);
    };
}

export function closeAction() {
    return {
        type: CLOSE
    };
}

export function autoCloseAction() {
    return dispatch => {
        dispatch({ type: AUTO_CLOSE });

        setTimeout(() => {
            if (!store.getState().mouseIn) {
                dispatch(closeAction());
            }
        }, 5000);
    };
}

1 Ответ

0 голосов
/ 02 июля 2019

setTimeout возвращает Id.Вы можете использовать этот идентификатор для очистки тайм-аута.В своем коде вы можете получить Id и передать его в действие "AUTO_CLOSE" и сохранить его в хранилище избыточностей.Затем, если пользователь нажимает «x», вы можете извлечь идентификатор из магазина и очистить тайм-аут с помощью «clearTimeout».

Что касается вопроса о наведении, я не до конца понял вашу проблему.

...