Перейти к содержанию

useHandler

Эта страница была перенесена из старой версии документации.

В процессе переписывания документации некоторые страницы могут быть немного устаревшими.

Это низкоуровневый хук, возвращающий объект контекста и значение, указывающее, следует ли перестраивать worklet, который может быть использован для создания пользовательских хуков-обработчиков событий типа useAnimatedGestureHandler или useAnimatedScrollHandler.

Аргументы

handlerOrHandlersObject [object with worklets]

Объект, содержащий пользовательские ключи, соответствующие собственным именам событий. Значения в объекте должны быть отдельными заготовками. Каждый из них будет срабатывать при наступлении соответствующего события на подключенном анимированном компоненте.

При вызове каждый из заготовок событий будет получать следующие параметры:

  • event [object] - объект события. Полезная нагрузка может отличаться в зависимости от типа события.

  • context [object] - обычный JS-объект, который может быть использован для хранения некоторого состояния. Этот объект будет сохраняться между событиями, и в него можно читать и записывать любые данные. При наличии нескольких обработчиков событий, представленных в виде объекта воркетов, объект context будет общим для всех воркетов, что позволит им взаимодействовать друг с другом.

dependencies [Array]

Необязательный массив значений, при изменении которых данный хук будет получать обновленные значения во время рендеринга оборачивающего компонента. Это важно, когда, например, worklet использует значения, зависящие от состояния компонента.

Здесь dependencies могут быть:

  • undefined (аргумент пропущен) - worklet будет перестроен, если произойдет изменение тела любого из callback'ов или значений из их закрытия (переменных из внешней области видимости, используемых в worklet'е),
  • пустой массив([]) - заготовка будет перестроена только при изменении тела любого из callback'ов,
  • массив значений([val1, val2, ..., valN]) - заготовка будет перестроена при изменении любого из тел обратных вызовов или любых значений из данного массива.

Возвращает

Хук возвращает контекст, который будет повторно использован обработчиками событий, и значение, указывающее, нужно ли перестраивать worklet. Если для web требуется другая реализация, то возвращается булево значение useWeb для проверки наличия web-окружения.

Пример

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
function useAnimatedPagerScrollHandler(
    handlers,
    dependencies
) {
    const {
        context,
        doDependenciesDiffer,
        useWeb,
    } = useHandler(handlers, dependencies);

    return useEvent(
        (event) => {
            'worklet';
            const { onPageScroll } = handlers;

            if (
                onPageScroll &&
                event.eventName.endsWith('onPageScroll')
            ) {
                onPageScroll(event, context);
            }
        },
        ['onPageScroll'],
        doDependenciesDiffer
    );
}

Ссылки

Комментарии