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

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

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

42 ответов

21 просмотр

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

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

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

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

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

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

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

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

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

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

Pavel
неа)

А, всё понял

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 функции, очень схожа. И в документации, я вам давал ссылку об этом написано: 'воспринимайте реакт компоненты как обычные функции'.

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

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

Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
55
Я тут за тем, чтобы задать вопрос, так как не знаю ассемблер, учу с/с++. Короче, насколько дорога операция перехода в функцию при ее вызове? Дело в том, что в с++ есть макросы...
Максим Рябцев
12
А какие чаты вообще в ходу? Auto aim? И что еше
do you think you're better off alone? А
13
hello friends. Do you know how can I learn getx? I have a software project that I should deliver it up to 5 weeks later and I need to learn firebase too. I will be thankfull
AmirHossein Razavi
15
Привет, нужен совет старших товарищей. Есть глобальная переменная var DefaultDataFolder:string; инициализируем DefaultDataFolder:='a:\_OUT\'; есть примитивная процедур...
Max Otto
14
Доброе время суток! у меня тут иноды закончились. и понял почему по сути кстит, я периодически очищаю постгрес и сентри контайнер: postgres=# DELETE FROM nodestore_node WHER...
Юсиф Насиров
9
Вопрос. Теоретический. Есть список команд. Команды отправляю в обработку некой функции, по очереди. Разные команды могут давать разные результаты после обработки. В зависимос...
Serjone
7
Какой дос блять?
007
9
lazarus-3.2.0/gtk, linux патч "имя проекта по умолчанию project1 -> prj" день добрый не нравится "именя проекта по умолчанию" (project1), к.раз приходится переименовывать (н...
livontiy
5
Коллеги, а в чём сейчас хорошо писать на перле, в смысле ide? Пробовал в идее с плагином, подсветка есть, даже какие-то предупреждения есть, но рефакторинга считай нет. Перене...
Дмитрий Петров
9
Карта сайта