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

Есть такая цепочка вызовов внутри onClick: setValue => someFunction. Почему при

вызове someFunction я получаю старое значение value?
Можно ли дождаться пока установиться новое значение и нужно ли это делать? Предполагаю, что нет, потому что это сделано для производительности.
Какой выход из ситуации? Передавать новое значение аргументом someFunction(value)? А что если там цепочка функции, передавать это значение каждый раз в нижестоящую функцию?
Возможно ли как-то упростить?

42 ответов

56 просмотров

а где собственно функция setValue то

Что мешает value + 1 сохранить в переменную? А если там цепочка одинаковых сеттеров, то там есть колбэк с prev для этого

"Почему при вызове someFunction я получаю старое значение value?" - ты вызываешь функцию и она полностью обрабатывается в текущем тике. выход из ситуации использовать useEffect

Pavel- Автор вопроса
IceBerg
Что мешает value + 1 сохранить в переменную? А есл...

нет цепочек сеттеров. Проблема доступа к новому значению переменной.

Комментарий написан кстати неправильно, там 3 будет, так как обычная операция

Pavel
нет цепочек сеттеров. Проблема доступа к новому зн...

Сохрани новое значение в переменную, и потом уже используй сколько хочешь раз

Pavel- Автор вопроса
Pavel- Автор вопроса
Pavel
2, в codesandbox, пример оттуда

Там сеттер даже нет перед комментарием, просто операция 2+1 и сохранение результата в переменную, как там может быть 2?

Pavel
неа)

А, всё понял

Pavel
Там нет сеттера)

Если там цепочка, то логичнее же в параметрах передавать

Pavel- Автор вопроса
IceBerg
Если там цепочка, то логичнее же в параметрах пере...

логичнее. Но это типа пропс дрилинга получается. Некрасиво.

Pavel- Автор вопроса
Pavel- Автор вопроса
IceBerg
Не получается

у вас есть цепочка из 5 условно фнукции и в каждую вы будите пробрасывать один и тот же аргумент?

Pavel- Автор вопроса
IceBerg
Если цепочка, то да

в реакте это называется пропс дриллинг)

Pavel- Автор вопроса

вы тогда аргументируйте, почему нет?)

Pavel
вы тогда аргументируйте, почему нет?)

Потому что в контексте пропсов решаются совсем другие проблемы, хотя бы потому что пропсы неизменяемы

Pavel- Автор вопроса
IceBerg
Потому что в контексте пропсов решаются совсем дру...

Не буду спорить с вами, наверное вы эксперт.

Pavel- Автор вопроса
Pavel- Автор вопроса
IceBerg
Потому что в контексте пропсов решаются совсем дру...

"Во многом компоненты ведут себя как обычные функции JavaScript. Они принимают произвольные входные данные (так называемые «пропсы») и возвращают React-элементы, описывающие, что мы хотим увидеть на экране."

Pavel- Автор вопроса
IceBerg
И?

И то, что идея пропс дриллинга и идея передачи аргументов функции в ванильном JS реализуемая через цепочку - одинакова!

Pavel
"Во многом компоненты ведут себя как обычные функц...

Если ты создашь const x = 5 и будешь прокидывать в какой-то компонент вниз на 5 компонентов, то 4 компонента будут просто выполнять роль пробрасывания, это пропсдриллинг, а вот если на 2-м шаге ты значение изменишь на 6, а в 3м на 7, то это уже не пропс дридлинг, а это именно то что ты пытаешься сделать в контексте обычных функций

и то,и то пропс дрилинг как по мне

почему 3, они же синхронно обновляются, может и 2

Batyr
и то,и то пропс дрилинг как по мне

Нет, с чего это, част компонентов выполняют работу над данными, там уже дальше по факту передаются другие пропсы

Pavel- Автор вопроса
IceBerg
Если ты создашь const x = 5 и будешь прокидывать ...

абсолютно верно. Но я не пытаюсь заменить на каждом этапе значение.

Pavel- Автор вопроса

Мне просто нужно получить новое значение внутри определенной функции, чтобы произвести определенные операции над другими данными. Это упрощенный пример. Касаемо пропс дриллинга, вы абсолютно правы, что значения пропс не меняются. Для этого и придумали контекст. Там ведь данные тоже не меняются.

Pavel
Мне просто нужно получить новое значение внутри оп...

Так в контексте и при каждом изменений ты будешь заново запускать цепочку функций/компонентов, чтобы поймать новое значение ниже по дереву, в твоём примере это происходит?

Pavel- Автор вопроса
Pavel
В моем примере это не происходит!

Потому и сравнение с решением проблемы пропсдриллинга не оч корректно

Pavel- Автор вопроса
IceBerg
Потому и сравнение с решением проблемы пропсдрилли...

Не очень корректна, но идея передачи данных, как я уже ранее говорил через условно 5 функции, очень схожа. И в документации, я вам давал ссылку об этом написано: 'воспринимайте реакт компоненты как обычные функции'.

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

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

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
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
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта