Conversation
|
@SmorodinVik докати этот PR, пожалуйста |
# Conflicts: # package-lock.json
# Conflicts: # .storybook/main.ts
hooks/use-debounced-callback/src/useDebouncedCallback.stories.tsx
Outdated
Show resolved
Hide resolved
|
В продолжении разговора на созвоне. Результат применения хука import useTimeout from '@byndyusoft-ui/use-timeout';
import { useCallback, useRef, useState } from 'react';
export function useDebouncedCallback<A extends any[]>(
callback: (...args: A) => void,
delay: number
): (...args: A) => void {
const [args, setArgs] = useState<A>();
const [shouldExecute, setShouldExecute] = useState(false);
useTimeout(() => {
if (shouldExecute) {
callback(...args!);
setShouldExecute(false)
}
}, shouldExecute ? delay : null);
return useCallback((...newArgs: A) => {
setShouldExecute(true);
setArgs(newArgs);
}, []);
}
export default useDebouncedCallback |
|
Заблокировано реализацией |
|
@sadcitizen посмотрит и зарелизит в новогодние праздники |
| <hr /> | ||
| <div className="container"> | ||
| <div className="row"> | ||
| <div className="use-array__container"> |
There was a problem hiding this comment.
А зачем это надо было делать?
There was a problem hiding this comment.
При запуске сторибуки классы с одинаковыми именами из других историй влияли друг на друга, добавлял это как временное решение. Сейчас поменял на css модули.
|
|
||
| type THookReturn<T> = [T, (arg: T) => void]; | ||
|
|
||
| export default function useDebouncedValue<T>(value: T, delay = 300): THookReturn<T> { |
There was a problem hiding this comment.
Начальное значение хука может быть задано не только значением, но и функцией. В пакете с типами был тип InitialState
|
|
||
| const cleanup = () => clearTimeout(timeoutIdRef.current); | ||
|
|
||
| useEffect(() => cleanup(), []); |
There was a problem hiding this comment.
А в блоке return точно не надо вызывать очистку? Что будет, если компонент, который вызывает хук, будет размонтирован до того как коллбек выполнится? Этот вызов надо бы отменить, иначе могут быть утечки памяти.
There was a problem hiding this comment.
Применил хук useTimeout, в нём очистка производится при размонтировании хука. Также дописал тест на это дело. Тест называется cleans up timer on unmount
dcf3a22 to
f0665de
Compare
No description provided.