169 похожих чатов

Кто знает как сделать полный аналог componentWillUnmount на хуках? Функция,

возвращаемая из useEffect, выполняется каждый раз когда меняются deps, а надо чтобы она выполнялась только 1 раз и только при реальном анмаунте. Идеи?

40 ответов

3 просмотра

Вызовов useEffect может быть больше одного на компонент. И в одном из вызовов массив зависимостей может быть пустым

Не должно быть пустого массива, если зависимости есть

Использовать классовые компоненты))

На хуках надо работать как на хуках, пытаться реализовывать классовые методы на них - плохая идея.

useEffect(() => { return () => { } }, []);

Danil Á.- Автор вопроса

Идея норм, почти все можно сделать точно так же, кроме вот этого вот момента, не понимаю как можно это сделать.

Danil Á.- Автор вопроса

Спасибо, но почитай выше почему это не подходит.

Скорее всего, тебе нужно сделать не ЭТО

+

Danil Á.- Автор вопроса

Мне нужно сдеать именно это)) Ладно, если нет способа сделать это по-нормальному, значит сделаю на классе.

ты попробуй описать задачу, а не решение. скорее всего проблема на другом уровне https://t.me/react_js/1196525

Danil Á.- Автор вопроса

Задача -- отправлять эвент некоторый именно тогда, когда компонент исчезает с экрана. Так яснее?

это описание решения

а return точно выполняется несколько раз? он как раз должен при unmount-е вызываться

useEffect(() => { return () => { dispatch(event()) } }, [dispatch]);

Danil Á.- Автор вопроса

Допустим ссылка на event обновляется. Это уже не будет работать как надо.

Danil Á.- Автор вопроса

Он уже мемоизирован и обновляется когда надо. Но мне НЕ надо чтобы функция, возвращаемая из useEffect вызывалась пока не будет отмонтирован.

Слишком частный случай описываешь. Выше правильно написали, что ошибка скорее всего где-то на более абстрактном уровне.

Danil Á.- Автор вопроса

Да, я знаю. И его можно решить по-другому и я знаю как. Но получится куда более громоздко чем использовать componentWillUnmount

На том уровне, на котором ты объяснил проблему другое решение вряд ли кто-то предложит.

Danil Á.- Автор вопроса

Спрашивая я надеялся что недостаточно хорошо знаю 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 }, []) }

На здоровье

Danil Á.- Автор вопроса

Раз так хорошо знаешь то наверное у тебя есть и ссылка на доки, где сказано что его задепрекейтили?

https://reactjs.org/docs/react-component.html#unsafe_componentwillmount

а, это willMount задеприкейтили

Danil Á.- Автор вопроса

кек)

в общем, мне без разницы – для меня class задеприкейтили года полтора назад

Danil Á.- Автор вопроса

Что значит -- для тебя? У тебя особый реакт что ли какой-то? Не думаю что в ближайшем будущем уберут.

у меня особый проект. я в нём могу не использовать слово class

Danil Á.- Автор вопроса

Круто)

Классно

и, возвращаясь к оригинальному поинту – не встречал ситуации, когда мне нужен класс или cWUM. если опишешь задачу (чего ты ещё не сделал), то, может, найдётся решение

Danil Á.- Автор вопроса

Не могу описать задачу. В смысле я то могу, но не имею права)

лол

А ты разве не был админом?

был. а ты не был?

Ну я и щас, бейджик просто скрыт

good for you 🙂

Похожие вопросы

Обсуждают сегодня

Типа вызывать GetParent и проверять на соответствие GetModuleHandle?
The Bird of Hermes
67
Do any of you guys have interesting projects one could join? I'm a Middle Full-Stack developer (JS/TS, React & Node)
Lev Shapiro
40
Есть сайт. Там была древняя версия эво. Стоял плагин, который каждый коммент в Jot делал отдельной страницей. После обновления все слетело, теперь старница открывается отдельн...
Artem
1
$res = json_decode($наша строка из респонса); $res1 = array_map(fn($o) => $o->name, $res->breadcrumbs[0]->entities); Как такое будет на Хаскеле?.. В начале весь джейсон, в ко...
Хаскель Моисеевич Гопник
27
Вопрос по диагностике ошибок (я знаю в чем, в данном конкретном примере, я знаю, как исправить, пример модельный, понятно, что в реальности бывает намного запутаннее). module...
ⰄⰎⰋⰐⰐⰑⰛⰤⰧⰧⰩⰄ ⰊⰑⰁⰓⰡⰛⰦⰕⰫ
11
В чем сила брат, в NASM или FASM?
Isaac Kleiner
18
А чем вам питонисты не угодили?😂
.
79
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
52
Хтось використовував Vapor на Windows?
Jaroshevskii
15
Какое виндузовое сообщение приходит TTabSheet, что риэлайняться контролы на нем, даже у которых парент другой? Ситуация: открываю форму - кнопок нет, перелистываю на другой т...
Катерина Свиридова
7
Карта сайта