вызове someFunction я получаю старое значение value?
Можно ли дождаться пока установиться новое значение и нужно ли это делать? Предполагаю, что нет, потому что это сделано для производительности.
Какой выход из ситуации? Передавать новое значение аргументом someFunction(value)? А что если там цепочка функции, передавать это значение каждый раз в нижестоящую функцию?
Возможно ли как-то упростить?
а где собственно функция setValue то
Что мешает value + 1 сохранить в переменную? А если там цепочка одинаковых сеттеров, то там есть колбэк с prev для этого
"Почему при вызове someFunction я получаю старое значение value?" - ты вызываешь функцию и она полностью обрабатывается в текущем тике. выход из ситуации использовать useEffect
нет цепочек сеттеров. Проблема доступа к новому значению переменной.
Комментарий написан кстати неправильно, там 3 будет, так как обычная операция
Сохрани новое значение в переменную, и потом уже используй сколько хочешь раз
2, в codesandbox, пример оттуда
Ты обманываешь
Там сеттер даже нет перед комментарием, просто операция 2+1 и сохранение результата в переменную, как там может быть 2?
А, всё понял
Там нет сеттера)
Если там цепочка, то логичнее же в параметрах передавать
логичнее. Но это типа пропс дрилинга получается. Некрасиво.
почему?
у вас есть цепочка из 5 условно фнукции и в каждую вы будите пробрасывать один и тот же аргумент?
Если цепочка, то да
в реакте это называется пропс дриллинг)
При чём тут пропсы?
вы тогда аргументируйте, почему нет?)
Потому что в контексте пропсов решаются совсем другие проблемы, хотя бы потому что пропсы неизменяемы
Не буду спорить с вами, наверное вы эксперт.
https://ru.legacy.reactjs.org/docs/components-and-props.html
"Во многом компоненты ведут себя как обычные функции JavaScript. Они принимают произвольные входные данные (так называемые «пропсы») и возвращают React-элементы, описывающие, что мы хотим увидеть на экране."
И то, что идея пропс дриллинга и идея передачи аргументов функции в ванильном JS реализуемая через цепочку - одинакова!
Если ты создашь const x = 5 и будешь прокидывать в какой-то компонент вниз на 5 компонентов, то 4 компонента будут просто выполнять роль пробрасывания, это пропсдриллинг, а вот если на 2-м шаге ты значение изменишь на 6, а в 3м на 7, то это уже не пропс дридлинг, а это именно то что ты пытаешься сделать в контексте обычных функций
и то,и то пропс дрилинг как по мне
почему 3, они же синхронно обновляются, может и 2
Нет, с чего это, част компонентов выполняют работу над данными, там уже дальше по факту передаются другие пропсы
Будет 2, там я ошибся
абсолютно верно. Но я не пытаюсь заменить на каждом этапе значение.
Пытаешься уже на первом шаге
Мне просто нужно получить новое значение внутри определенной функции, чтобы произвести определенные операции над другими данными. Это упрощенный пример. Касаемо пропс дриллинга, вы абсолютно правы, что значения пропс не меняются. Для этого и придумали контекст. Там ведь данные тоже не меняются.
Так в контексте и при каждом изменений ты будешь заново запускать цепочку функций/компонентов, чтобы поймать новое значение ниже по дереву, в твоём примере это происходит?
В моем примере это не происходит!
Потому и сравнение с решением проблемы пропсдриллинга не оч корректно
Не очень корректна, но идея передачи данных, как я уже ранее говорил через условно 5 функции, очень схожа. И в документации, я вам давал ссылку об этом написано: 'воспринимайте реакт компоненты как обычные функции'.
Обсуждают сегодня