Size: a a a

React — русскоговорящее сообщество

2020 November 16

D

Danila in React — русскоговорящее сообщество
Dmitriy Shuleshov
Лёгкая кастомизация, темизация
css-переменные бесплатны )
источник

DS

Dmitriy Shuleshov in React — русскоговорящее сообщество
Danila
css-переменные бесплатны )
Я понял что ты не имел дело с ui либами🌚
источник

D

Danila in React — русскоговорящее сообщество
Прямо сейчас пишу одну
источник

В

Влад in React — русскоговорящее сообщество
Интересно, не знал такой подход, спасибо
источник

D

Danila in React — русскоговорящее сообщество
Dmitriy Shuleshov
Я понял что ты не имел дело с ui либами🌚
Ну и да, много либ живёт без стайледов, а темизация через переменные или scss
источник

V

Vetro in React — русскоговорящее сообщество
Vladimir Samoilenko
Всем привет. Второй день плотно пытаюсь понять смысл useCallback и не понимаю. useMemo - понимаю, useCallback - нет. Закешировать значение функции для последующей быстрой выдачи, если аргументы не изменялись - понятно, а закешировать функцию-коллбек... извиняюсь, зачем? Во всякой доке пишут, чтобы ссылка на функцию не менялась, если не изменялось ничего из массива, что во втором аргументе. А зачем надо, чтобы ссылка на функцию не менялась, чтобы что? А если она изменится, что плохого произойдет?

На скриншоте код, скопированный мною из одного примера. Там два инпута, в первом из них значение переменной событием onChange устанавливается через useCallback, во втором - напрямую. Никакой разницы в работе двух этих инпутов нет от слова "вообще". Введенное значение одинаково бодренько отображается в <p> и в том, и в другом случае.
Если кому не лень пофилософствовать, помогите понять, плиз!
Чтобы не ререндерился какой-нибудь memo компонент, как вариант

Либо если этот коллбэк - зависимость в юзэффекте каком-нибудь
источник

D

Danila in React — русскоговорящее сообщество
В смысле, я понимаю, о чём ты, но это не такой уж большой профит, мне кажется
источник

NT

Nikolay Tolochnyy in React — русскоговорящее сообщество
Vladimir Samoilenko
Всем привет. Второй день плотно пытаюсь понять смысл useCallback и не понимаю. useMemo - понимаю, useCallback - нет. Закешировать значение функции для последующей быстрой выдачи, если аргументы не изменялись - понятно, а закешировать функцию-коллбек... извиняюсь, зачем? Во всякой доке пишут, чтобы ссылка на функцию не менялась, если не изменялось ничего из массива, что во втором аргументе. А зачем надо, чтобы ссылка на функцию не менялась, чтобы что? А если она изменится, что плохого произойдет?

На скриншоте код, скопированный мною из одного примера. Там два инпута, в первом из них значение переменной событием onChange устанавливается через useCallback, во втором - напрямую. Никакой разницы в работе двух этих инпутов нет от слова "вообще". Введенное значение одинаково бодренько отображается в <p> и в том, и в другом случае.
Если кому не лень пофилософствовать, помогите понять, плиз!
"А зачем надо, чтобы ссылка на функцию не менялась, чтобы что? А если она изменится, что плохого произойдет?"
надо, чтобы не создавать каждый раз новую функцию. Ты же обычно выносишь функции из какого-нибудь метода, а не хранишь их там, чтобы при вызове функции не создавалась новая функция?
источник

VS

Vladimir Samoilenko in React — русскоговорящее сообщество
Vetro
Чтобы не ререндерился какой-нибудь memo компонент, как вариант

Либо если этот коллбэк - зависимость в юзэффекте каком-нибудь
В смысле, если я пульну значение напрямую, то ререндериться будет все?
источник

VS

Vladimir Samoilenko in React — русскоговорящее сообщество
Nikolay Tolochnyy
"А зачем надо, чтобы ссылка на функцию не менялась, чтобы что? А если она изменится, что плохого произойдет?"
надо, чтобы не создавать каждый раз новую функцию. Ты же обычно выносишь функции из какого-нибудь метода, а не хранишь их там, чтобы при вызове функции не создавалась новая функция?
Ты про то, что при каждом новом рендере обработчики событий будут новыми функциями?
источник

V

Vetro in React — русскоговорящее сообщество
Vladimir Samoilenko
В смысле, если я пульну значение напрямую, то ререндериться будет все?
Если инлайн коллбэк генерится внутри рендера, и передается пропом в мемо компонент - ссылка будет изменяться каждый раз и мемо будет бесполезен (если не передана кастомная функция сравнения пропсов)
источник

NT

Nikolay Tolochnyy in React — русскоговорящее сообщество
Vladimir Samoilenko
Ты про то, что при каждом новом рендере обработчики событий будут новыми функциями?
по идеи да, новые ссылки будут
источник

VS

Vladimir Samoilenko in React — русскоговорящее сообщество
Nikolay Tolochnyy
по идеи да, новые ссылки будут
ну как бы и ладно, что плохого? Мусор в памяти?
источник

NT

Nikolay Tolochnyy in React — русскоговорящее сообщество
Vladimir Samoilenko
ну как бы и ладно, что плохого? Мусор в памяти?
ну если брать сообщение выше, то будет каждый раз ререндер потому что каждый раз будет создание нового обработчика и другая ссылка
источник

VS

Vladimir Samoilenko in React — русскоговорящее сообщество
Nikolay Tolochnyy
ну если брать сообщение выше, то будет каждый раз ререндер потому что каждый раз будет создание нового обработчика и другая ссылка
то есть, получается, что все обработчики ченджей, кликов и прочей хрени лучше оборачивать юзколлбеком?
источник

NT

Nikolay Tolochnyy in React — русскоговорящее сообщество
только там где нужно избежать какого-нибудь лишнего ререндера
источник

NT

Nikolay Tolochnyy in React — русскоговорящее сообщество
источник

VS

Vladimir Samoilenko in React — русскоговорящее сообщество
Nikolay Tolochnyy
только там где нужно избежать какого-нибудь лишнего ререндера
то есть, если обработчик внутренний, работает внутри компонента, то пусть себе так и работает, а если он передается пропсом куда-то вниз, то его лучше объюзколлбечить, чтобы ререндер происходил только при реальных изменениях? Примерно так?
источник

D

Danila in React — русскоговорящее сообщество
Vladimir Samoilenko
то есть, получается, что все обработчики ченджей, кликов и прочей хрени лучше оборачивать юзколлбеком?
Да, это первая мысль, которая возникает, но на это обычно следующие ответы -
1)  не стоит заниматься преждевременной оптимизацией
2) Реально это стоит делать, когда ты точно знаешь, что нижелещащий компонент мемоизирован, например
источник

VS

Vladimir Samoilenko in React — русскоговорящее сообщество
Danila
Да, это первая мысль, которая возникает, но на это обычно следующие ответы -
1)  не стоит заниматься преждевременной оптимизацией
2) Реально это стоит делать, когда ты точно знаешь, что нижелещащий компонент мемоизирован, например
а как можно мемоизировать целый компонент?
источник