Вам необходимо удалить зависимости из useEffect
.
useEffect(() => {
window.addEventListener('scroll', print, false);
return () => window.removeEventListener('scroll', print, false);
}); // remove the empty array
Если вы установите его на []
, то он будет выполнен только один раз.
Если вы удалите его, он будет выполняться при каждом обновлении.
В идеале вы хотите переоценивать код в useEffect
только при изменении value
. Затем вы можете добавить print
к массиву зависимостей.
const useCustomHook = () => {
const [value, setValue] = useState(-1);
// useCallback will re-create the function only if 'value' changes
const print = useCallback(() => {
console.log('print value: ', value);
}, [value]);
// useEffect will be re-evaluated if 'print' changes
useEffect(() => {
window.addEventListener('scroll', print, false);
return () => window.removeEventListener('scroll', print, false);
}, [print]);
return [setValue, print];
};