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

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

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

40 ответов

14 просмотров

Вызовов 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 🙂

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

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

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта