#12 Реализация реактивности - Vue.js: нюансы

  Рет қаралды 56,068

JavaScript.Ninja

JavaScript.Ninja

Күн бұрын

Пікірлер
@ekaterinakrutakova9781
@ekaterinakrutakova9781 3 жыл бұрын
Это очень важное объяснение, к слову! Спасибо за контент 👍
@ОлегСелин-ш9ы
@ОлегСелин-ш9ы 3 жыл бұрын
Вот такие тонкости очень сложно отлавливать. Спасибо огромное за разъяснение!
@jackdrengr5069
@jackdrengr5069 3 жыл бұрын
Спасибо Вам, Илья. Фундаментальные знания в таких вещах крайне полезны.
@КостянЕрмаков-е9ю
@КостянЕрмаков-е9ю 3 жыл бұрын
Пожалуй завтра на свежую голову еще раз посмотрю. 😁
@dimwel
@dimwel 3 жыл бұрын
Розбійник - ключ до розуміння відмонності Вю2 від Вю3 ))
@РоманКовалевский-ф6м
@РоманКовалевский-ф6м 3 жыл бұрын
Посмотрев видео второй раз, намного лучше всё понял:) Спасибо за подробное обьяснение
@kusov4748
@kusov4748 3 жыл бұрын
Круто, получается новая реактивность круче за счёт того что исключаются неочевидные изменения стейта через сторонние объекты
@ivanfedorov7934
@ivanfedorov7934 3 жыл бұрын
отличное видео такие тонкости объясняются - это дорогого стоит
@gerasim_vol
@gerasim_vol 3 жыл бұрын
Крутой контент. Спасибо!
@ЕкатеринаЗданевич-ы2х
@ЕкатеринаЗданевич-ы2х 10 ай бұрын
Фига себе!! Вот это объяснение) и такое красивое) получила удовольствие от просмотра)
@Vladislav3329RUS
@Vladislav3329RUS Жыл бұрын
Сегодня на собесе спросили этот вопрос, ответил неверно, сейчас для меня прям откровение)
@RuslanDasaev-f7f
@RuslanDasaev-f7f 3 жыл бұрын
Курс просто бомба!!! Воистину it`s over 9000!!!!
@alexitu
@alexitu 3 жыл бұрын
Понял то, что к этому видео нужно будет вернуться еще пару раз.
@АлексейАлексеев-ю3ъ
@АлексейАлексеев-ю3ъ 3 жыл бұрын
Я после каждого видео понимаю, что нужно будет к ним вернуться))
@alexitu
@alexitu 3 жыл бұрын
@@АлексейАлексеев-ю3ъ да, это хороший способ, главное не сразу возвращаться, а дать мозгу передышку и время на осмысление)
@faizulla5838
@faizulla5838 3 жыл бұрын
Учитывая что Реакт это "камасутра" ...а ВЬЮИ это НИНЗЯ .... то к ангуляру вообще опасно подходить ....
@mikhalpalych
@mikhalpalych Жыл бұрын
Это значит только то что чел так объяснил. Бинг мне сейчас этот аспект за минут 5 разжевал
@faizulla5838
@faizulla5838 3 жыл бұрын
Рад что начал с Vue тут хоть додзё .... а у тех кто пошел в React .... там Самураии и у них Камасутра.... Димыч там всех ...... во всех позах.
@romanmalkevych6425
@romanmalkevych6425 2 жыл бұрын
Годний відос) Дякую)
@SchnippSchnappShnappi
@SchnippSchnappShnappi 9 ай бұрын
Спасибо большое, стало все гораздо яснее!
@MegaTesei
@MegaTesei Жыл бұрын
Ты такой красавчик! Я как ребёнок тебя слушаю)😶‍🌫
@КузнецовСергей-н2ф
@КузнецовСергей-н2ф 3 жыл бұрын
Лучшее объяснение, спасибо!
@SansHAP
@SansHAP 3 жыл бұрын
Илья, в этом видео все супер. Очень радует, что наконец в этом плане Vue начал вести себя ожидаемо. А в телеге так и не получил ответ на заданный вопрос ((
@dudundich6280
@dudundich6280 3 жыл бұрын
В подобных примерах Нужен заголовок!!! для vue2 `Vu2 ` и для vue3 соотв-щий Зы. приходится вспоминать контекст при переключении экранов с версиями vue - запутывает ....(отматываем назад слушаем - а это про ...vue2 ....) ибо не сразу заметил - см. url ...
@КостянЕрмаков-е9ю
@КостянЕрмаков-е9ю 3 жыл бұрын
Да, есть такое, тоже иногда путался немного. А если ставить на паузу и пытаться разглядеть (на компьютере), то название видео перекрывает название вкладок.
@cikada3398
@cikada3398 3 жыл бұрын
там в названии проекта еще версия указана)
@wwiiktor
@wwiiktor 3 жыл бұрын
Чем дальше в лес, тем меньше желающих :D
@bukanaka
@bukanaka 3 жыл бұрын
@AndKozinsky
@AndKozinsky 3 жыл бұрын
Написал похожий пример на Proxy. Он срабатывает только если я изменяю сам объект proxy напрямую: вставляю новый элемент массива или добавляю свойство. Последняя строка кода не приведет к выводу значения value в Консоле потому что изменяется внутренний объект. let proxy = new Proxy([{ a: 1}], { set(target, prop, value) { target[prop] = value console.log(value) return true } }) const obj = {a: '-'} proxy.push(obj) proxy[1].a = 10 Вью автоматически оборачивает не только корневые данные, но и все вложенные. То есть это обёртки рекурсивно оборачивающие данные в которых находятся другие обёртки с данными.
@PeterShumski
@PeterShumski 2 жыл бұрын
Топ контент, спасибо Илья!
@levdau
@levdau 3 жыл бұрын
Замечательные видео! Спасибо!
@isfland
@isfland 3 жыл бұрын
Даже учитывая, что у меня уже есть опыт в разработке на Vue, было сложно следить за мыслью. Вторая версия, третья версия, геттеры, сеттеры, прокси, все в перемешано в едином чане. Контент отличный, но было бы круто поработать ещё над структурой подачи.
@corey4448
@corey4448 2 жыл бұрын
У человека есть проблема - реактивность в его новом проекте не работает. Он находит этот видос, смотрит, и понимает что не так. Если у тебя есть опыт в разработке на Вью, но видос типа сложен, то скорее всего с такими нюансами мог просто не столкнуться, например когда проект мейнтейнишь, а не с нуля делаешь.
@yakovlev_io
@yakovlev_io 3 жыл бұрын
Спасибо за крутое объяснение)
@yurastasyuk5783
@yurastasyuk5783 3 жыл бұрын
Дуже цікаво, дякую👍
@angelproduction4047
@angelproduction4047 3 жыл бұрын
Дуже круто, дуже дякую!
@ПанЧиЛо
@ПанЧиЛо 3 жыл бұрын
Спасибо за объяснение, было очень интересно и информативно. Как раз хотел начать изучать вью после реакта. А как освоюсь с первым, попробую и Angular.
@redhook777
@redhook777 3 жыл бұрын
Vue быстро освоишь, а вот с ангуляром придется попотеть
@maryanakachanava1049
@maryanakachanava1049 3 жыл бұрын
Не будет ли проблем во Vue3, если ты сам проксируешь объекты для своих целей? Насколько я понимаю, если обернуть уже запроксированный объект в прокси, заданные хуки как бы сливаются, поэтому по идее все должно быть ок.
@Owner0
@Owner0 Жыл бұрын
да будут проблемы если я правильно понял так лучше не делать. Тпо нужно напрямую только с реативными данными работать
@alexanonymous5823
@alexanonymous5823 3 жыл бұрын
просто огонь=)) спасиб огромное=))
@КонстантинС-ж1ы
@КонстантинС-ж1ы 3 жыл бұрын
Вопрос по поводу kzbin.info/www/bejne/qqWZh3iIjtR1rac Когда мы напрямую изменили newItem, что произошло с объектом обернутым в прокси? Насколько я понял, его значение тоже изменилось, но в обход прокси, поэтому хоть и не сработала реактивность, но само значение в объекте внутри прокси поменялось? Если мы сравним значения поля price у newItem и у последнего элемента в this.items, то оно будет одинаковым?
@КонстантинС-ж1ы
@КонстантинС-ж1ы 3 жыл бұрын
Уже проверил в codesandbox. Действительно значение объекта внутри прокси меняется вместе с значением в newItem. А, чисто теоретически, как правильно обновить прокси, чтобы быть точно уверенным, что сейчас отображается именно те значения, которые реально есть в объекте? Я пробовал такое this.items[this.items.length - 1].price = this.items[this.items.length - 1].price и это не сработало, хотя сработало this.items[this.items.length - 1].price = this.items[this.items.length - 1].price + "test";
@КонстантинС-ж1ы
@КонстантинС-ж1ы 3 жыл бұрын
В общем, мне кажется есть смысл отдельно осветить, что хотя в vue3 мы не увидели изменений на экране, это не значит, что данные не изменились.
@SansHAP
@SansHAP 3 жыл бұрын
@@КонстантинС-ж1ы так в видео о подходе применения реактивности во 2 и 3 версиях, а не о полях объектов. Было же сказано, что ссылки идут на один и тот же объект. Разница лишь в том, что в 3 версии массив Items оборачивается в прокси и любой объект, который записывается в этот Items - проксируется автоматически (попадает в Items не напрямую). "this.items[this.items.length - 1].price = this.items[this.items.length - 1].price и это не сработало" - а что должно сработать, если ничего не поменялось?
@КонстантинС-ж1ы
@КонстантинС-ж1ы 3 жыл бұрын
@@SansHAP в общем, для меня было не очевидно, что мы всё таки изменили объект находящийся в массиве, но эти изменения просто не отобразились. this.items[this.items.length - 1].price = this.items[this.items.length - 1].price Я надеялся, что раз я присваиваю через прокси, пусть и то же самое значение, сработает реактивность и обновится отображаемая информация.
@andreygokhan6893
@andreygokhan6893 3 жыл бұрын
@@КонстантинС-ж1ы Описывая ловушку в прокси, только вы можете решить при каких условиях будет срабатывать побочный эффект присвоения - обновление контента html элемента ("реактивность":)) и естественно чтобы напрасно не тревожить дом вы обязательно должны проверять равенство старого и нового значения.
@ВладимирНетот
@ВладимирНетот Жыл бұрын
Уже пердставил боль переноса крупного проекта с Vue2 на Vue3 😭
@АлександрРыков-ж4ы
@АлександрРыков-ж4ы 3 жыл бұрын
Vue3 есть перемена создана через reactive ```js if ( state.paramsGames.Txt.substr(0, 1) === "Q") // так реактивность computed теряется ``` так нет ```js const Txt = state.paramsGames.Txt; if ( Txt.substr(0, 1) === "Q") ``` В чем разница?
@Owner0
@Owner0 Жыл бұрын
может что вручную меняется значение ? но я тоже не особо понимаю
@alexanderx7959
@alexanderx7959 Жыл бұрын
а вот это - интересно )
@РоманЮрченко-н9с
@РоманЮрченко-н9с Жыл бұрын
во что превращается прокси когда бабель компилит его для старих браузеров?
@JavaScriptNinja
@JavaScriptNinja Жыл бұрын
Ни во что. Бабель не умеет комрилировать прокси
@РоманЮрченко-н9с
@РоманЮрченко-н9с Жыл бұрын
@@JavaScriptNinja понял спс.
@artemzlobin4054
@artemzlobin4054 3 жыл бұрын
Правильно ли я понял, что Вью3 теперь по "реактивности" больше похож на Реакт, чем на Вью2? Какая разница, использовать this.foo = bar или this.set('foo', 'bar'), если origObj.foo = bar не работает. Вы же сами говорили, что возможность не знать ничего про Вью, то есть про this, это основное отличие Вью от Реакта?
@stabby6521
@stabby6521 3 жыл бұрын
Объясните пожалуйста, как вывод в консоль перед пушем в объект, вывел содержимое, когда его там еще не должно быть:?
@JavaScriptNinja
@JavaScriptNinja 3 жыл бұрын
потому что консоль хрома "ленивая" - отображает последнее состояние объекта
@stabby6521
@stabby6521 3 жыл бұрын
@@JavaScriptNinja воу, раньше не замечал. Прикольно
@r2r4ik
@r2r4ik 3 жыл бұрын
А что не так с codepen???
@dimariskhakov1057
@dimariskhakov1057 3 жыл бұрын
Подозреваю, что в codepen нет SFC, в то время как Sandbox максимально близко имитирует разработку на локалке
@ds40a
@ds40a 2 жыл бұрын
вот то, что попало за "мембрану" не ссылается уже на newItem как вы нарисовали, а есть его не тождественная копия. Вы же сами показали в коде console.log(this.items[this.items.length - 1] === newItem) FALSE Из-за чего изменения в newItem никак не отображаются в его копии за "мембраной". А вообще в данном случае отсутствие явной типизации в языке иллюстрирует как на ровном месте заработать себе кучу проблем. Потому как в версии 3 массив уже не массив, а Proxy и поведение коренным образом отличается, а понять ето просто читая код нет никакой возможности.
@JavaScriptNinja
@JavaScriptNinja 2 жыл бұрын
Суть вьюшного прокси как раз в том, что не отличается :)
@slaty331
@slaty331 2 жыл бұрын
не совсем понимаю при чем тут типизация. Мы обратились к this, к какому то объекту, что то туда положили, при сохранении возможны преобразования. Вот и получилось console.log(this.items[this.items.length - 1] === newItem) это console.log(Proxy=== Object) FALSE. Это не говорит о том что изменения в newItem не произойдут в this.items[this.items.length - 1], просто изменения минуют методы SET в Proxy, из-за чего не произойдут изменения в отображении. Можно обновиться с костылями, вызвав this.$forceUpdate()
@alexs7931
@alexs7931 3 жыл бұрын
А как же в .Net web приложениях(на сервере по крайней мере)? Там всё жёстко типимизированно, в массив items нельзя добавить значение foo не описав его в интерфейсе. Это я клоню в сторону жёсткой типимизации , с целью контроля качества кода.
@JavaScriptNinja
@JavaScriptNinja 3 жыл бұрын
Предложите решение для мира JS?
@alexs7931
@alexs7931 3 жыл бұрын
Пусть остаётся так, если в vue2 нет интерактивности(реактивности) на foo, то это даже хорошо, что бы не менялась структура items. 😁
@Owner0
@Owner0 Жыл бұрын
мне кажется что если не жестко типизированый язык то проще понимать и писать его
@alexs7931
@alexs7931 Жыл бұрын
@@Owner0 когда много часов подряд работаешь с кодом , контроль типов в ручную становится проблемой. Речь не о скиле, а о издержках на рутину.
@ДидарСалимгереев
@ДидарСалимгереев 3 жыл бұрын
🔥🔥🔥
@АлександрМелянюк-ц9ю
@АлександрМелянюк-ц9ю 3 жыл бұрын
Спасибо! Нет возможности сейчас смотреть, видео останутся на KZbin?
@ДидарСалимгереев
@ДидарСалимгереев 3 жыл бұрын
По-моему да, они останутся на плейлисте по Vue
@ПанЧиЛо
@ПанЧиЛо 3 жыл бұрын
Да, останутся
@АлександрМелянюк-ц9ю
@АлександрМелянюк-ц9ю 3 жыл бұрын
@@ДидарСалимгереев Спасибо!
@АлександрМелянюк-ц9ю
@АлександрМелянюк-ц9ю 3 жыл бұрын
@@ПанЧиЛо Спасибо!
@valerye.8785
@valerye.8785 3 жыл бұрын
А я когда пробовал работать с Vue 3 думал что он сломанный :)
@Fillit4
@Fillit4 3 жыл бұрын
Так, ну а во Vue4 на чем будет реализована реактивность после проксей Vue3 ? )
@digitalturkistan1857
@digitalturkistan1857 2 жыл бұрын
На колбеках
@404Negative
@404Negative 2 жыл бұрын
на вере в бога
@bohdans.1479
@bohdans.1479 2 жыл бұрын
Прикольно)
@DavitAve
@DavitAve Жыл бұрын
Через два дня на собес должен идти по vue middle рол года как не работал с vue только react что будет фиг знает)))))
@Antonio-fm1sq
@Antonio-fm1sq 3 жыл бұрын
Спасибо
@Shadzen
@Shadzen 3 жыл бұрын
Получается вью3 старые браузеры не поддерживают? А как же ие10 и андройд 4.2? Для бизнеса это важно, никто не хочет терять дополнительных клиентов.
@JavaScriptNinja
@JavaScriptNinja 3 жыл бұрын
Обещали совместимый билд, но он будет вести себя как вью2
@jackdrengr5069
@jackdrengr5069 3 жыл бұрын
IE10 - это Windows 7, поддержку которой сам Microsoft сворачивает вовсю. Может и сторонним разработчикам пора остановиться? Семёрка - отличная ОС, но, увы, ее время подходит к концу.
@andreygokhan6893
@andreygokhan6893 3 жыл бұрын
По мере возможности помогаю таким "клиентам". Устанавливаю им Хром удаляю ярлыки ИЕ и говорю: Интернет поменял кнопочку и теперь кнопочка интернета выглядит так. "Клиенту" достаточно одного сайта - домашней страницы иначе "клиент" может заблудиться.
@grantorino3465
@grantorino3465 3 жыл бұрын
Не смешите, уже об ie11 забыли, какой еще 10???
@jackdrengr5069
@jackdrengr5069 3 жыл бұрын
@@grantorino3465 увы, ещё кое-где просят. Сам обычно пытаюсь вразумить или побороть высокими эстимейтами, но если клиент сильно хочет, то приходится.
@Viktorres1
@Viktorres1 3 жыл бұрын
Vue 2 - розбійник)
@stanislav5846
@stanislav5846 3 жыл бұрын
MERCI MERCI MERCI
@gunini_kirill
@gunini_kirill Жыл бұрын
С первого и двоимого раза не понял. Вернулся снова через 3 дня и как понял)
@yehudavolodin1183
@yehudavolodin1183 3 жыл бұрын
жесть
@yoursleepandrelaxation6948
@yoursleepandrelaxation6948 2 жыл бұрын
Короче я понял. У сеньоров есть такая забава - придумывать себе проблему и потом пытаться ее решить. Весь сыр бор из-за того что он создал новый объект за пределами data и его изменяет
@teizer1122
@teizer1122 2 жыл бұрын
так он не создал новое коневое поле в не data, он просто запушил в массив новый элемент и уже его изменял
@uran1980video
@uran1980video 3 жыл бұрын
Интересно, а Минин эти ньансы объясняет? вопрос риторический =)
@DES2048
@DES2048 3 жыл бұрын
Об этом написано в документации ко 2му vue, это не какие-то сакральные знания
@JavaScriptNinja
@JavaScriptNinja 3 жыл бұрын
Смотря о чем. Если о различии в поведении вью3 и вью2 - то у меня ушло время чтобы сделать код, который работает во вью2 но не работает во вью3 (не наоборот)
@mikhailsorokin3830
@mikhailsorokin3830 3 жыл бұрын
@@DES2048 спасибо большое.А нахрена Минин делает курсы,ведь все,что он говорит,является на 95% текстом доки
@DES2048
@DES2048 3 жыл бұрын
@@mikhailsorokin3830 его курсы рассчитаны на совсем новичков, и к слову сказать, во фронт я вполне нормально выкатился благодаря его курсам, правда бесплатным на KZbin.
@alexs7931
@alexs7931 3 жыл бұрын
У Минина есть видео о Proxy, кажется о нововведениях в js. Норм видео чо :)
@stow1x
@stow1x 3 жыл бұрын
Розбійники тут?
@tomitomion1179
@tomitomion1179 3 жыл бұрын
Ну его нафиг это ваш codesandbox
@Owner0
@Owner0 Жыл бұрын
я тоже так подумал
@faizulla5838
@faizulla5838 3 жыл бұрын
Что бы понять, что говорит Профессор.... сперва почитай что говорят кандидаты и доктора внизу в комментах Нельзя было немного структурировать? и этот детский лепет-обсуждение с самим собой немного отвлекает. Сам материал взрыв мозга!
@ИванИванов-ц5ю6х
@ИванИванов-ц5ю6х 3 жыл бұрын
Меня одного напрягает сумбурная подача материала с водичкой?
@gerda-morozova
@gerda-morozova 3 жыл бұрын
Аналогично. Честно говоря меня напрягло, что в примере изменяют не items в data, а объект newItems, который УЖЕ передали в data. Честно - я не знаю кто будет так делать, но, я так полагаю это просто показательный пример, чтобы узнать про тонкости реактивности.
@IvanIsayev
@IvanIsayev 3 жыл бұрын
Спасибо за контент! Очень полезное видео!
#13 Компоненты - Vue.js: концепции
1:07:35
JavaScript.Ninja
Рет қаралды 62 М.
Transformers (how LLMs work) explained visually | DL5
27:14
3Blue1Brown
Рет қаралды 4,3 МЛН
I'VE MADE A CUTE FLYING LOLLIPOP FOR MY KID #SHORTS
0:48
A Plus School
Рет қаралды 20 МЛН
Hilarious FAKE TONGUE Prank by WEDNESDAY😏🖤
0:39
La La Life Shorts
Рет қаралды 44 МЛН
Какой я клей? | CLEX #shorts
0:59
CLEX
Рет қаралды 1,9 МЛН
Todo app (список задач) на Vue 3 + Composition API  / Vue практика
25:47
Правильные page layouts во Vue
19:25
Мастерская разработчика
Рет қаралды 10 М.
Stop Using .value with ref In Vue 3! Reactivity Transformed Explained!
14:22
#14 Криптономикон-3: vue-cli и tailwind
17:43
JavaScript.Ninja
Рет қаралды 42 М.
Vue 3: Reactivity Made Easy (ref, reactive, toRefs... oh my!)
13:04
Program With Erik
Рет қаралды 50 М.
Вся суть работы с внешним API на Vue | Просто объясняю Vue 3
15:24
Lectoria. Обучение веб-разработке.
Рет қаралды 19 М.
#7 Реактивность, Что? Как? Зачем? - ReactJS Полный курс
14:42
Евгений Паромов | Front-end
Рет қаралды 8 М.