возвращаемая из useEffect, выполняется каждый раз когда меняются deps, а надо чтобы она выполнялась только 1 раз и только при реальном анмаунте. Идеи?
Вызовов useEffect может быть больше одного на компонент. И в одном из вызовов массив зависимостей может быть пустым
Не должно быть пустого массива, если зависимости есть
Использовать классовые компоненты))
На хуках надо работать как на хуках, пытаться реализовывать классовые методы на них - плохая идея.
useEffect(() => { return () => { } }, []);
Идея норм, почти все можно сделать точно так же, кроме вот этого вот момента, не понимаю как можно это сделать.
Спасибо, но почитай выше почему это не подходит.
Скорее всего, тебе нужно сделать не ЭТО
+
Мне нужно сдеать именно это)) Ладно, если нет способа сделать это по-нормальному, значит сделаю на классе.
ты попробуй описать задачу, а не решение. скорее всего проблема на другом уровне https://t.me/react_js/1196525
Задача -- отправлять эвент некоторый именно тогда, когда компонент исчезает с экрана. Так яснее?
это описание решения
а return точно выполняется несколько раз? он как раз должен при unmount-е вызываться
useEffect(() => { return () => { dispatch(event()) } }, [dispatch]);
Допустим ссылка на event обновляется. Это уже не будет работать как надо.
Он уже мемоизирован и обновляется когда надо. Но мне НЕ надо чтобы функция, возвращаемая из useEffect вызывалась пока не будет отмонтирован.
Слишком частный случай описываешь. Выше правильно написали, что ошибка скорее всего где-то на более абстрактном уровне.
Да, я знаю. И его можно решить по-другому и я знаю как. Но получится куда более громоздко чем использовать componentWillUnmount
На том уровне, на котором ты объяснил проблему другое решение вряд ли кто-то предложит.
Спрашивая я надеялся что недостаточно хорошо знаю React и тут кто-то скажет мне что я идиот и вот тут достаточно просто указать параметр:)
я достаточно хорошо знаю реакт – никогда мне не приходилось прибегать к componentWillUnmount (с тех пор, как его задеприкейтили). "ты идиот, вот тут достаточно просто переосмыслить подход к решению"
type AnyFunction = (...params: unknown[]) => unknown export function useActualCallback<T extends AnyFunction>(callback: T): T { const ref = useRef(callback) ref.current = callback return useMemo(() => { const callback = (...args: unknown[]) => ref.current(...args) return callback as T }, []) }
На здоровье
Раз так хорошо знаешь то наверное у тебя есть и ссылка на доки, где сказано что его задепрекейтили?
https://reactjs.org/docs/react-component.html#unsafe_componentwillmount
а, это willMount задеприкейтили
кек)
в общем, мне без разницы – для меня class задеприкейтили года полтора назад
Что значит -- для тебя? У тебя особый реакт что ли какой-то? Не думаю что в ближайшем будущем уберут.
у меня особый проект. я в нём могу не использовать слово class
Круто)
Классно
и, возвращаясь к оригинальному поинту – не встречал ситуации, когда мне нужен класс или cWUM. если опишешь задачу (чего ты ещё не сделал), то, может, найдётся решение
Не могу описать задачу. В смысле я то могу, но не имею права)
лол
А ты разве не был админом?
был. а ты не был?
Ну я и щас, бейджик просто скрыт
good for you 🙂
Обсуждают сегодня