Самый скользкий механизм в Redux

  Рет қаралды 14,839

АйТи Синяк

АйТи Синяк

Күн бұрын

Пікірлер: 156
@trueman8413
@trueman8413 Жыл бұрын
Урааа, новый видос от Синяка
@dmitryjob7980
@dmitryjob7980 Жыл бұрын
Отлично разжевал! Спасибо!
@ТомасКудин
@ТомасКудин Жыл бұрын
Отлично разжевал!!! Спасибо большое))
@huzimuzi4885
@huzimuzi4885 Жыл бұрын
Только начал разбирать эту проблему , как у тебя выходит видео!) Спасибо, очень круто все рассказал.
@it-sin9k
@it-sin9k Жыл бұрын
Вовремя я!)
@it_doc2319
@it_doc2319 Жыл бұрын
Отличное видео с разбором тонкостей Redux. Я тоже как-то заметил в профилировщике, что без второго аргумента рендеров больше, нежели с подставленным shallowEqual из Ramda или Lodash.
@kspshnik
@kspshnik Жыл бұрын
Просто прекрасно!
@denisdikusar9423
@denisdikusar9423 10 ай бұрын
Отлично разжевал! )) Спасибо за детали!
@korsakovoleg9985
@korsakovoleg9985 Жыл бұрын
Спасибо, даже знаю где у меня в проекте есть такая ошибка!👍
@ТарасМаковейчук
@ТарасМаковейчук Жыл бұрын
Поздравляю, сперва взяли иммутабельность, а потом героически её победили.
@it-sin9k
@it-sin9k Жыл бұрын
Опыт показывает, какое решение не бери, все равно будет где то жопа торчать) поэтому такого рода скользкие механизмы вполне себе естественны при любом решении)
@toni4i696
@toni4i696 Жыл бұрын
Это очень полезная информация, спасибо! Были такие ошибка
@miloman1995s
@miloman1995s Жыл бұрын
офигенно, я просто всегда юзал reselect и создавал какие то сложные селекторы с помощью функции createSelector(), а оно вон че, но это как промисы, хоть мы и часто пользуемся async await - надо знать как оно работает под капотом, спс!
@it-sin9k
@it-sin9k Жыл бұрын
Рад быть полезным!
@qutbiddinmakhmudov4088
@qutbiddinmakhmudov4088 Жыл бұрын
Отлично разжевал! Мое почтение
@Iraes05
@Iraes05 11 ай бұрын
Долгое время работал на друх стейт менеджерах, пришлось перейти на редакс... Огромное спасибо, что ты делаешь такие замечательные ролики! Без тебя, моя жизнь была бы в разы сложнее!
@sinvolen4193
@sinvolen4193 Жыл бұрын
Чувак от души, отлично всё разжевал🤣🤣🤣, успехов тебе
@vvadimvoit7704
@vvadimvoit7704 Жыл бұрын
супер!) очень интерактивно и доступно, спасибо!)
@ArtikMan1994
@ArtikMan1994 Жыл бұрын
Хорошо что подобные кейсы на данный момент описаны в документации редакса. Более того, там есть несколько решений данной проблемы в отдельных случаях. И обьясняется как правильно использовать селекторы, а как не стоит
@frusen_sol
@frusen_sol Жыл бұрын
Отличительно разжевал!
@r.raskolnickoff1408
@r.raskolnickoff1408 Жыл бұрын
Спасибо! В очередной раз убедился что нативный js лучше всяких популярных либ и фреймворков :)
@firefeed1
@firefeed1 Жыл бұрын
Отлично
@JustTrace17
@JustTrace17 Жыл бұрын
Отлично разжевал!
@viktorgusev3701
@viktorgusev3701 Жыл бұрын
Блин все круто, но как будто на самом интересно и остановился, хотелось бы услышать про reselect
@it-sin9k
@it-sin9k Жыл бұрын
Так есть же финальное видео про reselect kzbin.info/www/bejne/p4jdqaqwmM-nqs0
@AlexanderGontarev
@AlexanderGontarev Жыл бұрын
хороший видос, спасибо
@it-sin9k
@it-sin9k Жыл бұрын
Спасибо!
@andreev.frontend
@andreev.frontend Жыл бұрын
Действительно отлично разжевал! Спасибо! Только вхожу в react/redux и твои видео очень помогают писать код сразу правильно!
@it-sin9k
@it-sin9k Жыл бұрын
Рад быть полезным :)
@ansaganie
@ansaganie Жыл бұрын
Крутое видео! Спасибо большое! мне кажется для большего понимания нужно было отметить что перерендриваться будут только те компоненты со сломанном селектором. Так люди могут подумать что сломанные селекторы будут заставлять перерендриваться абсолютно все компоненты. Или я что-то не так понял))
@sv1net584
@sv1net584 Жыл бұрын
Разобрано и объяснено отлично, но на мой взгляд это не хрупкость редакса, т.к. ссылки и значения это базовая концепция, которую необходимо знать каждому разрабу.
@-X-Ray-
@-X-Ray- Жыл бұрын
Кайф, лишний раз убеждаешься насколько важно понимать, как работают инструмены)
@LevShuroff
@LevShuroff Жыл бұрын
Очень качественный контент, впрочем как всегда на высоте. Благодарю за ценную информацию, ждём нового пушечного контента
@it-sin9k
@it-sin9k Жыл бұрын
Спасибо!)
@alexd1723
@alexd1723 Жыл бұрын
Спасибо за годный контент
@TravinskiyVladislav
@TravinskiyVladislav Жыл бұрын
Спасибо, полезное видео
@АлексейСтепанов-к9о
@АлексейСтепанов-к9о Жыл бұрын
Лайк!!! Отлично разжевал!!!
@PavelLitkinBorisovich
@PavelLitkinBorisovich Жыл бұрын
Как жеж хорошо что не надо работать с редаксом больше мне😅
@it-sin9k
@it-sin9k Жыл бұрын
Что используете?)
@ultraduck100
@ultraduck100 Жыл бұрын
а если до реселекта не добрались то можно использовать shallowEqual для поверхностного сравнения, который так любезно нам предоставляет react-redux
@it-sin9k
@it-sin9k Жыл бұрын
хороший комментарий)
@TheTexPro
@TheTexPro Жыл бұрын
Отлично разжевал 😉
@user-helena-mankova
@user-helena-mankova 4 ай бұрын
отлично разжевал))
@starwalker.odessa
@starwalker.odessa Жыл бұрын
Мне одному не понятно почему шаблонизатор react-js пытается изображать из себя - ...контроллер? ))) Что бы проблемы react`а закончились ...нужно перестать превращать его в контроллер. Имеет смысл написать для него - оболочку (архитектуру), которая бы управляла состояниями и шаблона и в целом делегировала полномочия.
@demiurgen13
@demiurgen13 Жыл бұрын
Отлично разжевал) но текст призыва к комментарию нужно сделать длиннее, из серии "Братан, хорош, давай, давай, вперёд! Контент в кайф, можно ещё? Вообще красавчик! Можно вот этого вот почаще?" Чтобы за счет ленивых жоп продвигался контент алгоритмом - он вроде коммент из двух слов не засчитывает
@it-sin9k
@it-sin9k Жыл бұрын
Интересный момент) я хз честно говоря как работает алгоритм)
@brr3534
@brr3534 Жыл бұрын
Уточка
@demiurgen13
@demiurgen13 Жыл бұрын
@@it-sin9k Я тоже хз, но на тех каналах, где ребята шарят - они просят оставлять комменты длиной не менее 4-5 слов для продвижения
@it-sin9k
@it-sin9k Жыл бұрын
@@demiurgen13 О как) буду иметь ввиду на будущее) спасибо!)
@ИльяБондаренко-т4е
@ИльяБондаренко-т4е Жыл бұрын
Эх... а на курсах яндекса по реакту про это не слово (
@it-sin9k
@it-sin9k Жыл бұрын
Это уже более продвинутый контент все же)
@good_news_every
@good_news_every Жыл бұрын
Как всегда круто, спасибо! Планируете ли ролики по исследованию производительности приложения, например через Profiler (в React Developer Tools) или welldone-software/why-did-you-render ?
@it-sin9k
@it-sin9k Жыл бұрын
Есть мысли такие, не знаю как доберусь, но мысли есть)
@MrVertu01
@MrVertu01 Жыл бұрын
Чет даже не знал, что фильтр возвращает новую ссылку массива... эт сколько ж перфоманса упала из-за этого....
@669pain
@669pain Жыл бұрын
Получается что по своей сути Hook useSelector работает так же как и HOC connect. При любом изменении стора все подписчики оповещаются, но будет ли перерисован компонент или нет решает функция сравнения состояний
@it-sin9k
@it-sin9k Жыл бұрын
Абсолютно верно :)
@kusov4748
@kusov4748 Жыл бұрын
Нет. Connect по дефолту использует shallow сравнение в отличие от сравнения по ссылке в useSelector. Поэтому в каком-то смысле useSelector это шаг назад в вопросе оптимизации ререндеров
@it-sin9k
@it-sin9k Жыл бұрын
@@kusov4748 ну не совсем так. mapStateToProps всегда возвращал объект, а внутри него уже был cars, currentUser и т.д. Т.е. список машин все равно проверялся по ссылке , а не проверялись машины внутри него. Поэтому идея осталась прежней
@kusov4748
@kusov4748 Жыл бұрын
@@it-sin9k посмотрите доку redux. Там об этом пишут
@it-sin9k
@it-sin9k Жыл бұрын
@@kusov4748 никто и не спорит, что там об этом пишут) вот бы все еще доку читали и правильно понимали все моменты)
@TheProfessionalGambler
@TheProfessionalGambler Жыл бұрын
Хороший ролик, спасибо. Возможно это больше не проблема редакса, а реакта и подхода иммутабельности. Хотя их уже и не разделить 😄
@HandsomeRoman
@HandsomeRoman Жыл бұрын
Спасибо за позновательный контент! Что думаешь о проблеме tearing в отношении разных библиотек с внешним состоянием, например, mobx?
@it-sin9k
@it-sin9k Жыл бұрын
честно говоря, я только сейчас гуглил, что такое tearing. Поэтому пока ничего сказать не могу :(
@antonmas3451
@antonmas3451 Жыл бұрын
удивительно, при всем уважении, автор залезает в исходники и действительно глубоко старается разобраться что под капотом react и redux, и вот тут ты ждешь что у автора серьезный подход, но затем автор начинает рассказывать то чего не существует в официальной спецификации о передачах по значению и ссылке..Не знаю как Вас зовут, но интересует честный ответ(я понимаю что хомячки просто млеют от вашего ума и захейтят меня тут,к тому же этот комент вы удалите или не заметите) вопрос- Вам самому как? Вам ,которому важен доскональный подход, неудосужиться залезть в спеку и развенчать мифы!! почему у вас руки не дошли до спеки ecmascript и увидеть что там все передается по ссылке , но никогда по значению? надеюсь на понимание и честный ответ самому себе и возможно работу над ошибками, с той же педантичностью) (еще раз аппеляция к мама.ру, learn.js не подходит, только оф спецификация js) ps надеюсь буду услышан
@it-sin9k
@it-sin9k Жыл бұрын
Добрый день :) У вас какой-то негативный опыт общения в комментариях) не думаю, что на вас нападут "блеющие хомячки" или я удалю комментарий) наверное за всю историю канала я удалил 1-2 комментариям, где люди очень грубо обзывались По поводу передача по ссылке и по значению. У меня уже был тред на эту тему, достаточно длинный получился) Я размышляю об этом может отдельное видео сделать) Но я вообще не отношусь к этому как к большой проблеме. Нас так учат еще с универов и на работе и в интернете продолжают повторять эту мантру. Идея в том, что так проще людям донести мысль, а задача моих роликов как раз донести некую конкретную идею, а не все нюансы всего У меня были и другие интересные обсуждения, например то, что когда достаю значение из объекта по ключу это быстрее, чем перебирать массив через find. А тред растянулся на много сообщений, что вообще то на С под капотом движка тоже циклом ищет значение, поэтому все что я говорю это не правда Честно говоря я не знаю исходники движков) и спецификацию не знаю толком) и никогда не говорил, что я в этом разбираюсь) и мне приятно, что вы ждете от меня таких знаний) но их просто нет) если хотите поделиться с подписчиками своим опытом буду очень рад предоставить площадку и ресурсы для создания видео)
@LevShuroff
@LevShuroff Жыл бұрын
Что если сравнивать объекты через Json.stringify, а не shallowEqual?
@it-sin9k
@it-sin9k Жыл бұрын
не думаю, что приведение объекта в строку дешевая операция
@igogs7095
@igogs7095 Жыл бұрын
Тема важная. Вопрос, если передать функцию сравнения типо isEqual из lodash это спасет?
@it-sin9k
@it-sin9k Жыл бұрын
Да, это спасет. Я думаю в текущей ситуации даже функция shallowEqual спасет. Так как в самом массиве ссылки на машины одни и те же. Ну и конечно shallowEqual куда дешевле, чем глубокое сравнение
@dimitro.cardellini
@dimitro.cardellini Жыл бұрын
та-а-а-к ;) По-перше, бездоганна візуалізація -- от би я так міг малювати! По-друге, трохи обережно з термінами. Дуже часто терміни "store" та "state" використано один замість іншого. Це не дуже впливає на загальну суть, але на рівні коду різниця ключова. Посилання на "store" ніколи не змінюється, на відміну від посилання на "state", яке в ідеалі змінюється при кожному диспатчі. По-третє, власне useSelector та рендери -- це не про Redux, а про React та байдінг редаксу до React (react-redux), то ж тут трохи не зрозуміло в чому саму крихкість редаксу. Але це вже трохи буквоїдство
@it-sin9k
@it-sin9k Жыл бұрын
Комментарии все абсолютно верные) Когда я пишу сценарии к видео, очень сложно варьировать между совсем правильными четкими формулировками и известными всем словами. Вот иногда так и получается)
@SuhushinAS
@SuhushinAS Жыл бұрын
Согласен на 100% Подход с иммутабельностью позволяет экономить на сравнениях состояний, иначе каждый раз приходилось бы делать deepEqual. А если используются какие-то преобразования, типа filter, то обязательно нужно делать кэширование, с reselect или useMemo. Вообще, мне кажется, большая часть проблем производительности связана не с самими библиотеками, а с тем, на сколько правильно декомпозируются компоненты.
@snatvb
@snatvb Жыл бұрын
у меня на собесах разрабы часто валятся на таких вещах, хотя позиционируют себя как сеньёры помидоры)
@it-sin9k
@it-sin9k Жыл бұрын
Теперь будут лучше подготовлены) я слышал много отзывов, что по моим видосам готовятся к собесам))
@starwalker.odessa
@starwalker.odessa Жыл бұрын
у тебя на собесах - только Ты читаешь с бумажки ))) Удобно ))) Господин Team Leader )))))))))))))))))))))))))) Хотелось бы посмотреть на твой код )
@it-sin9k
@it-sin9k Жыл бұрын
@@starwalker.odessa я честно говоря даже не знаю, что действительно эффективно спрашивать на собесах) все крайне субъективно)
@stasmamontov5788
@stasmamontov5788 Жыл бұрын
​@@starwalker.odessa это скорее тем, кто вместо прочтения доки полностью, читает быстрый старт и считает что хорошо знает библиотеку
@starwalker.odessa
@starwalker.odessa Жыл бұрын
@@it-sin9k Я подскажу - гонять разраба (которые не раз горел в танках) по всем темам нет смысла. Я предлагаю программистам - готовиться в рамках заранее составленных тем, которые касаются проекта на который их набирают. Мне, за 15 лет в этом дурдоме, нет смысла запоминать весь этот trash, потому как сообщество каждые 2 года кардинально переодеваются в концепциях. И даже если я прав в том или ином вопросе - составляющие долгостроя от этого не поменяются. Нет смысла ждать заучку который зазубрил manual, мне важно только - сможет ли он достаточно подготовится перед началом проекта, на который его рассматривают.
@АнтонСтрока
@АнтонСтрока Жыл бұрын
Redux toolkit тоже таким страдает ?
@it-sin9k
@it-sin9k Жыл бұрын
конечно :)
@TheProfessionalGambler
@TheProfessionalGambler Жыл бұрын
А какая разница плачу я от дохода или работодатель? Результат один и тот же.
@it-sin9k
@it-sin9k Жыл бұрын
Не совсем так. Есть вероятность, что вы прошли бы курсы за какие-то деньги и никуда не устроились, деньги бы просто сгорели. Тут вам дают бесплатно понять, ваше это или нет. После обучения, на какую зарплату бы вы пошли, хз. Кто то на 40к, кто-то на 50к, кто то найдет вообще стажировку бесплатную на 3 месяца. С этой стороны вам помогут устроиться сразу на максимально возможную вилку. Без их помощи маловероятно, что вы бы устроились, сразу на такую зарплату, таким образом они забирают те деньги, которые вы бы и так не получали, а вы по факту не платили за обучение.
@kronatankristof8804
@kronatankristof8804 Жыл бұрын
это тулкитная "проблема". Если делать через connect, такой шняги нет.
@it-sin9k
@it-sin9k Жыл бұрын
ну здрасте, конечно есть :)
@kronatankristof8804
@kronatankristof8804 Жыл бұрын
​@@it-sin9k немного не так выразился. В коннектах люди обычно вменяемые редьюсеры пишут, согласно старым паттернам. А тулкиты народ юзает как в примерах написано. А там про второй параметр как-то редко пишут. На выходе имеем что имеем.
@it-sin9k
@it-sin9k Жыл бұрын
@@kronatankristof8804 Как по мне мало что изменилось) кто плохо писал, то так же и пишет, а кто старался тот и по прежнему старается)
@starwalker.odessa
@starwalker.odessa Жыл бұрын
Господа, а вам не кажется что вся эта шляпа от того, что кто-то внедрил моду на функциональное программирование? К примеру если React программу реализовать на классах + FLUX (подписка только на однопоточное событие, которое нас интересуют (предшественник redux)) ...да, приложение становится сложнее, ...но работает куда проще чем вся эта современная петрушка с функциональщиной и redux.
@_always_21
@_always_21 Жыл бұрын
вечный холивар... так и до работы с чистым js/html дойти. будет ли быстрее работать? скорее всего - да. но вот скорость разработки...
@starwalker.odessa
@starwalker.odessa Жыл бұрын
@@_always_21 Я ничего не говорил про чистый js... тут и на не чистом мало кто нормально программирует. Достаточно найти одно нормальное решение и пользоваться им. event dispatcher store + react === good! ...не вижу проблем отписываться от handler`ов в destructor`е... чем городить все эти hoooooooook`и. java - вообще не болеет подобными детскими проблемами. Так может лучше писать на java? И переводить его в JavaScript через Web Assemble? ...а не придурошный type script и прочие декорации )
@bogdanshelomanov5668
@bogdanshelomanov5668 Жыл бұрын
вообще это тупо, зачем мне думать об этом обновлении, почему стм на своем уровне не умеет решить, какой селектор конкретно нужно тригернуть. Ну и в итоге даже если в селекторе не фильтр, а просто новый обьект, ссылка уже не равно, в любом случае тригер, юзать везде реселект выйдет тоже такое себе, нужно без него сделать тест на перфоманс, с ним и уже думать нужен или нет, гемор еще тот
@it-sin9k
@it-sin9k Жыл бұрын
Это видео не про решение ваших проблем, а скорее про более глубокое понимание инструментов, как они работают :)
@apexnuts9785
@apexnuts9785 Жыл бұрын
Отлично разжевал! Спасибо!
@dmitrykisel9564
@dmitrykisel9564 Жыл бұрын
Отлично разжевал!
@АлексейСоловьев-е9о
@АлексейСоловьев-е9о Жыл бұрын
Отлично разжевал! Спасибо!
@darkside2436
@darkside2436 Жыл бұрын
Отлично разжевал 😉
@Tciganskybaron
@Tciganskybaron 10 күн бұрын
Кайфовое видеео спасибо!
@Shad0w5m00h
@Shad0w5m00h Жыл бұрын
Спасибо, чрезвычайно полезная информация, много использую редакс! А если селекторы составлять таким образом, что они просто возвращают action.payload, а какие-то изменения производить извне? Так не будет перерендеров?
@it-sin9k
@it-sin9k Жыл бұрын
Спасибо :) Если вы никак не работаете над данными внутри селектора, то лишних рендеров не будет
@ПолончукАлександр
@ПолончукАлександр Жыл бұрын
Отличнооо разжевал =D Ждем Реселект)))
@it-sin9k
@it-sin9k Жыл бұрын
По реселекту все уже опубликовано)
@evisotskiydev
@evisotskiydev Жыл бұрын
так подробно разбирать джуновскую проблему... ну не знаю, насколько это целесообразно
@it-sin9k
@it-sin9k Жыл бұрын
сложно сказать какого уровня эта проблема. Но за 8 компаний, где местами были одни синьоры помидоры, я видел такого рода "ломаные" селекторы неоднократно
@VYuhim
@VYuhim Жыл бұрын
Было бы круто услышать твое мнение про MobX и его сравнение с Redux
@it-sin9k
@it-sin9k Жыл бұрын
Да, планируется такой плейлист :)
@vasiapypochkin3241
@vasiapypochkin3241 8 ай бұрын
Спасибо!
@beholderrk
@beholderrk Жыл бұрын
Кайф
@ilhomyuldoshev5033
@ilhomyuldoshev5033 Жыл бұрын
Отлично разжевал 👍
@hihoho1578
@hihoho1578 Жыл бұрын
Опять редакс 😢
@it-sin9k
@it-sin9k Жыл бұрын
Закончим с ним будем дальше рассматривать стейт менеджеры)
@AndriiKuftachov
@AndriiKuftachov Жыл бұрын
Мне кажется, что тут проблема номер ноль именно в том, что люди непонятно зачем суют в глобальное состояние то, что там не должно быть.
@it-sin9k
@it-sin9k Жыл бұрын
Мне кажется это часто зависит от моды) Одно время пихали прям все подряд в стор, вспомнить тот же redux-form, который каждый чих в стор складывал. И все работало и большинство людей все устраивало. Потом началась новая мода, класть туда, только то что нужно. При этом на моих нескольких проектах были споры на эту тему между разрабами, кто то хотел как раньше все через Redux, а кто то был уже адэптем класть, только то что нужно :)
@AndriiKuftachov
@AndriiKuftachov Жыл бұрын
@@it-sin9k но там вопрос больше в предсказуемости, чем в производительности. Вообще особого смысла в глобальном сторе нету, до того момента, когда приложение живёт само по себе и лишь иногда, по необходимости, общается с сервером. Подход в Ангуляр с сервисами и RxJS на много чище и понятнее.
@AndriiKuftachov
@AndriiKuftachov Жыл бұрын
@@it-sin9k хотя, конечно, при SSR, наверное, с глобальным состоянием лучше. Другой вопрос, что SSR суют туда, где он не нужен...
@ddflruc
@ddflruc Жыл бұрын
Отлично разжевал!!! Спасибо))))
@vladimirliankevich1361
@vladimirliankevich1361 Жыл бұрын
Спасибо за информацию. Разжевал отличноооо!!
@romanchutak
@romanchutak Жыл бұрын
Реально отлично, благодарю
@it-sin9k
@it-sin9k Жыл бұрын
Спасибо!
@AndreyShevchenko-yd3tg
@AndreyShevchenko-yd3tg Жыл бұрын
Спасибо. Отлично объяснил
@maks-kander6665
@maks-kander6665 Жыл бұрын
Очень качественно разжевал все, респект👍
@fukas9672
@fukas9672 Жыл бұрын
Отлично разжевал)
@alehbarushka9835
@alehbarushka9835 Жыл бұрын
Благодарю!
@Ramosok
@Ramosok Жыл бұрын
Выход каждого твоего видео, это как праздник) Спасибо!!!
@it-sin9k
@it-sin9k Жыл бұрын
Спасибо!)
@papa_paskualle
@papa_paskualle Жыл бұрын
Перед просмотром одеваешься нарядно?
@Ramosok
@Ramosok Жыл бұрын
@@papa_paskualle да)) как догадался?))
@Son0fBeelzebub
@Son0fBeelzebub Жыл бұрын
не существует никаких сравнений по ссылке и по значению, только по ссылке. вот это "загуглите" - как раз то, почему в джс постоянно из уст в уста передаются мифы и тупые глупости.
@it-sin9k
@it-sin9k Жыл бұрын
Если просветите как это работает, буду очень признателен))
@Son0fBeelzebub
@Son0fBeelzebub Жыл бұрын
@@it-sin9k в джсе все передается по референсу на референс. это можете прочитать где-нибудь на 2ality и некоторые блоги содержат сообщения разработчика джс брендона эйха. передача объекта и примитивного значения происходит одинаково. существуют данные в памяти или создаются, var a = "abc" - это несколько выражений, где "abc" и "a" являются оба ссылками на данные-объект типа строка в рантайме. когда мы передаем объект, то мы делаем то же самое. передаем ссылку на объект. а его структура - это лишь одно из проперти объекта в представлении рантайма. мы изменяем именно это поле, сама ссылка на объект сохраняется. у примитивных значения другой поведение. когда мы используем какие-либо операторы, например сложение, то мы получаем выражения, которые в сумме возвращают нам новое примитивное значение. остальное только явными примерами я бы показал лично, но вряд ли нам это нужно. почитайте про флаг --allow-natives-syntax, д8, jsvu, %DebugPrint %DebugPrintPtr и станет намного яснее.
@it-sin9k
@it-sin9k Жыл бұрын
звучит все разумно :) Вопрос только в следующем var a = 'abc' var b = 'abc' это 2 разных объекта типа строка, и когда мы сравниваем 2 разных объекта через ===. И это сравнение возвращает true. Как это описать как не сравнение по значению?
@Son0fBeelzebub
@Son0fBeelzebub Жыл бұрын
@@it-sin9k нет, как раз и а, и б - в этом случае - это ссылки на объект типа строка в памяти. поэтому, когда мв сравниваем а с б, то мы сравниваем 0х04fa37be === 0x04fa37be и получаем тру. просто поведение объектов налл/андефайнд/число/строка и так далее - иное, нежели у обычного объекта. то естт, это такие объекты, которые отдают свое значение, а не структуру. То есть, в случае общего выражения var a = "abc" выражение "abc" создает константную строку в хипе. иммутабельную. потом выражение в ответ отдает нам референс на эту строку. она уже есть, правильно? и, если она иммутабельна и константна, то зачем нам копия этой строки? не за чем. поэтому var b = "abc" - он находит уже эту строку в памяти и просто отдает тот же адрес) и связывает его с б. а потом при строгом сравнении сравниваем два одинаковых адреса
@it-sin9k
@it-sin9k Жыл бұрын
> и, если она иммутабельна и константна, то зачем нам копия этой строки? не за чем. поэтому var b = "abc" - он находит уже эту строку в памяти и просто отдает тот же адрес) и связывает его с б. а потом при строгом сравнении сравниваем два одинаковых адреса т.е. идея в том, что при создании одинаковой строки, оно находит, что такая строка уже создана и использует ту же ячейку в памяти? Звучит как достаточно дорогая операция для огромного проекте. А есть подтверждение где то такому поведению?
Делюсь опытом по использованию reselect
8:23
АйТи Синяк
Рет қаралды 10 М.
Почему удалять StrictMode плохая идея?
9:30
АйТи Синяк
Рет қаралды 17 М.
Spongebob ate Michael Jackson 😱 #meme #spongebob #gmod
00:14
Mr. LoLo
Рет қаралды 8 МЛН
Nastya and balloon challenge
00:23
Nastya
Рет қаралды 64 МЛН
А ВЫ ЛЮБИТЕ ШКОЛУ?? #shorts
00:20
Паша Осадчий
Рет қаралды 9 МЛН
Which One Is The Best - From Small To Giant #katebrush #shorts
00:17
Reselect не так прост как кажется!
15:41
АйТи Синяк
Рет қаралды 13 М.
Способы разработки веб-сайтов
25:03
Vallek: фронтенд и образование
Рет қаралды 13 М.
Куда катится React? Это успех или провал?
12:05
АйТи Синяк
Рет қаралды 17 М.
Абсолютно новое мышление с Server Components
11:10
АйТи Синяк
Рет қаралды 19 М.
Reselect для оптимизации Redux стора
18:17
Михаил Непомнящий
Рет қаралды 20 М.
Программисты-самоучки... Слушайте внимательно.
22:45
Евгений Афанасьев
Рет қаралды 72 М.
Победит ли Zustand старичка Redux?
8:05
АйТи Синяк
Рет қаралды 15 М.
React Reconciliation
11:53
АйТи Синяк
Рет қаралды 91 М.
Spongebob ate Michael Jackson 😱 #meme #spongebob #gmod
00:14
Mr. LoLo
Рет қаралды 8 МЛН