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

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

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

42 ответов

60 просмотров

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
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
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
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
Карта сайта