Тёмный

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

JavaScript.Ninja
Подписаться 55 тыс.
Просмотров 55 тыс.
50% 1

Телеграм-сообщество t.me/vuejs_club
CodeSandbox c Vue3: codesandbox.io...
CodeSandbox c Vue2: codesandbox.io...
Материалы:
О реактивности во Vue2: ru.vuejs.org/v...
О геттерах и сеттерах: learn.javascri...
О реактивности во Vue3 (eng): v3.vuejs.org/g...
О Proxy: learn.javascri...
О Vue.set: ru.vuejs.org/v...
Видео создано благодаря подписчикам проекта на нашем Patreon.
Хотите получать контент на 3 месяца раньше остальных? Присоединяйтесь! / javascriptninja

Опубликовано:

 

3 окт 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 140   
@ekaterinakrutakova9781
@ekaterinakrutakova9781 3 года назад
Это очень важное объяснение, к слову! Спасибо за контент 👍
@ОлегСелин-ш9ы
@ОлегСелин-ш9ы 3 года назад
Вот такие тонкости очень сложно отлавливать. Спасибо огромное за разъяснение!
@jackdrengr5069
@jackdrengr5069 3 года назад
Спасибо Вам, Илья. Фундаментальные знания в таких вещах крайне полезны.
@КостянЕрмаков-е9ю
@КостянЕрмаков-е9ю 3 года назад
Пожалуй завтра на свежую голову еще раз посмотрю. 😁
@alexitu
@alexitu 3 года назад
Понял то, что к этому видео нужно будет вернуться еще пару раз.
@АлексейАлексеев-ю3ъ
Я после каждого видео понимаю, что нужно будет к ним вернуться))
@alexitu
@alexitu 3 года назад
@@АлексейАлексеев-ю3ъ да, это хороший способ, главное не сразу возвращаться, а дать мозгу передышку и время на осмысление)
@faizulla5838
@faizulla5838 3 года назад
Учитывая что Реакт это "камасутра" ...а ВЬЮИ это НИНЗЯ .... то к ангуляру вообще опасно подходить ....
@mikhalpalych
@mikhalpalych Год назад
Это значит только то что чел так объяснил. Бинг мне сейчас этот аспект за минут 5 разжевал
@ivanfedorov7934
@ivanfedorov7934 3 года назад
отличное видео такие тонкости объясняются - это дорогого стоит
@gerasim_vol
@gerasim_vol 3 года назад
Крутой контент. Спасибо!
@РоманКовалевский-ф6м
Посмотрев видео второй раз, намного лучше всё понял:) Спасибо за подробное обьяснение
@kusov4748
@kusov4748 3 года назад
Круто, получается новая реактивность круче за счёт того что исключаются неочевидные изменения стейта через сторонние объекты
@ЕкатеринаЗданевич-ы2х
@ЕкатеринаЗданевич-ы2х 7 месяцев назад
Фига себе!! Вот это объяснение) и такое красивое) получила удовольствие от просмотра)
@Vladislav3329RUS
@Vladislav3329RUS Год назад
Сегодня на собесе спросили этот вопрос, ответил неверно, сейчас для меня прям откровение)
@SchnippSchnappShnappi
@SchnippSchnappShnappi 5 месяцев назад
Спасибо большое, стало все гораздо яснее!
@faizulla5838
@faizulla5838 3 года назад
Рад что начал с Vue тут хоть додзё .... а у тех кто пошел в React .... там Самураии и у них Камасутра.... Димыч там всех ...... во всех позах.
@RuslanDasaev-f7f
@RuslanDasaev-f7f 3 года назад
Курс просто бомба!!! Воистину it`s over 9000!!!!
@romanmalkevych6425
@romanmalkevych6425 2 года назад
Годний відос) Дякую)
@MegaTesei
@MegaTesei Год назад
Ты такой красавчик! Я как ребёнок тебя слушаю)😶‍🌫
@isfland
@isfland 3 года назад
Даже учитывая, что у меня уже есть опыт в разработке на Vue, было сложно следить за мыслью. Вторая версия, третья версия, геттеры, сеттеры, прокси, все в перемешано в едином чане. Контент отличный, но было бы круто поработать ещё над структурой подачи.
@corey4448
@corey4448 Год назад
У человека есть проблема - реактивность в его новом проекте не работает. Он находит этот видос, смотрит, и понимает что не так. Если у тебя есть опыт в разработке на Вью, но видос типа сложен, то скорее всего с такими нюансами мог просто не столкнуться, например когда проект мейнтейнишь, а не с нуля делаешь.
@КузнецовСергей-н2ф
Лучшее объяснение, спасибо!
@dimwel
@dimwel 3 года назад
Розбійник - ключ до розуміння відмонності Вю2 від Вю3 ))
@wwiiktor
@wwiiktor 3 года назад
Чем дальше в лес, тем меньше желающих :D
@bukanaka
@bukanaka 3 года назад
@IvanIsayev
@IvanIsayev 3 года назад
Спасибо за контент! Очень полезное видео!
@SansHAP
@SansHAP 3 года назад
Илья, в этом видео все супер. Очень радует, что наконец в этом плане Vue начал вести себя ожидаемо. А в телеге так и не получил ответ на заданный вопрос ((
@yurastasyuk5783
@yurastasyuk5783 3 года назад
Дуже цікаво, дякую👍
@PeterShumski
@PeterShumski 2 года назад
Топ контент, спасибо Илья!
@levdau
@levdau 3 года назад
Замечательные видео! Спасибо!
@yakovlev_io
@yakovlev_io 3 года назад
Спасибо за крутое объяснение)
@dudundich6280
@dudundich6280 3 года назад
В подобных примерах Нужен заголовок!!! для vue2 `Vu2 ` и для vue3 соотв-щий Зы. приходится вспоминать контекст при переключении экранов с версиями vue - запутывает ....(отматываем назад слушаем - а это про ...vue2 ....) ибо не сразу заметил - см. url ...
@КостянЕрмаков-е9ю
@КостянЕрмаков-е9ю 3 года назад
Да, есть такое, тоже иногда путался немного. А если ставить на паузу и пытаться разглядеть (на компьютере), то название видео перекрывает название вкладок.
@cikada3398
@cikada3398 3 года назад
там в названии проекта еще версия указана)
@angelproduction4047
@angelproduction4047 3 года назад
Дуже круто, дуже дякую!
@alexanonymous5823
@alexanonymous5823 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 Вью автоматически оборачивает не только корневые данные, но и все вложенные. То есть это обёртки рекурсивно оборачивающие данные в которых находятся другие обёртки с данными.
@ПанЧиЛо
@ПанЧиЛо 3 года назад
Спасибо за объяснение, было очень интересно и информативно. Как раз хотел начать изучать вью после реакта. А как освоюсь с первым, попробую и Angular.
@redhook777
@redhook777 3 года назад
Vue быстро освоишь, а вот с ангуляром придется попотеть
@alexanderx7959
@alexanderx7959 Год назад
а вот это - интересно )
@ДидарСалимгереев
@ДидарСалимгереев 3 года назад
🔥🔥🔥
@bohdans.1479
@bohdans.1479 2 года назад
Прикольно)
@maryanakachanava1049
@maryanakachanava1049 3 года назад
Не будет ли проблем во Vue3, если ты сам проксируешь объекты для своих целей? Насколько я понимаю, если обернуть уже запроксированный объект в прокси, заданные хуки как бы сливаются, поэтому по идее все должно быть ок.
@Owner0
@Owner0 Год назад
да будут проблемы если я правильно понял так лучше не делать. Тпо нужно напрямую только с реативными данными работать
@Antonio-fm1sq
@Antonio-fm1sq 3 года назад
Спасибо
@ВладимирНетот
@ВладимирНетот Год назад
Уже пердставил боль переноса крупного проекта с Vue2 на Vue3 😭
@artemzlobin4054
@artemzlobin4054 3 года назад
Правильно ли я понял, что Вью3 теперь по "реактивности" больше похож на Реакт, чем на Вью2? Какая разница, использовать this.foo = bar или this.set('foo', 'bar'), если origObj.foo = bar не работает. Вы же сами говорили, что возможность не знать ничего про Вью, то есть про this, это основное отличие Вью от Реакта?
@stanislav5846
@stanislav5846 2 года назад
MERCI MERCI MERCI
@valerye.8785
@valerye.8785 3 года назад
А я когда пробовал работать с Vue 3 думал что он сломанный :)
@yehudavolodin1183
@yehudavolodin1183 3 года назад
жесть
@РоманЮрченко-н9с
во что превращается прокси когда бабель компилит его для старих браузеров?
@JavaScriptNinja
@JavaScriptNinja Год назад
Ни во что. Бабель не умеет комрилировать прокси
@РоманЮрченко-н9с
@@JavaScriptNinja понял спс.
@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()
@r2r4ik
@r2r4ik 3 года назад
А что не так с codepen???
@dimariskhakov1057
@dimariskhakov1057 3 года назад
Подозреваю, что в codepen нет SFC, в то время как Sandbox максимально близко имитирует разработку на локалке
@АлександрМелянюк-ц9ю
Спасибо! Нет возможности сейчас смотреть, видео останутся на RU-vid?
@ДидарСалимгереев
@ДидарСалимгереев 3 года назад
По-моему да, они останутся на плейлисте по Vue
@ПанЧиЛо
@ПанЧиЛо 3 года назад
Да, останутся
@АлександрМелянюк-ц9ю
@@ДидарСалимгереев Спасибо!
@АлександрМелянюк-ц9ю
@@ПанЧиЛо Спасибо!
@АлександрРыков-ж4ы
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 Год назад
может что вручную меняется значение ? но я тоже не особо понимаю
@КонстантинС-ж1ы
@КонстантинС-ж1ы 3 года назад
Вопрос по поводу ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-tt6VERYoBwE.html Когда мы напрямую изменили 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 элемента ("реактивность":)) и естественно чтобы напрасно не тревожить дом вы обязательно должны проверять равенство старого и нового значения.
@Viktorres1
@Viktorres1 3 года назад
Vue 2 - розбійник)
@stow1x
@stow1x 3 года назад
Розбійники тут?
@DavitAve
@DavitAve Год назад
Через два дня на собес должен идти по vue middle рол года как не работал с vue только react что будет фиг знает)))))
@stabby6521
@stabby6521 3 года назад
Объясните пожалуйста, как вывод в консоль перед пушем в объект, вывел содержимое, когда его там еще не должно быть:?
@JavaScriptNinja
@JavaScriptNinja 3 года назад
потому что консоль хрома "ленивая" - отображает последнее состояние объекта
@stabby6521
@stabby6521 3 года назад
@@JavaScriptNinja воу, раньше не замечал. Прикольно
@Fillit4
@Fillit4 3 года назад
Так, ну а во Vue4 на чем будет реализована реактивность после проксей Vue3 ? )
@digitalturkistan1857
@digitalturkistan1857 2 года назад
На колбеках
@404Negative
@404Negative Год назад
на вере в бога
@gunini_kirill
@gunini_kirill Год назад
С первого и двоимого раза не понял. Вернулся снова через 3 дня и как понял)
@alexs7931
@alexs7931 3 года назад
А как же в .Net web приложениях(на сервере по крайней мере)? Там всё жёстко типимизированно, в массив items нельзя добавить значение foo не описав его в интерфейсе. Это я клоню в сторону жёсткой типимизации , с целью контроля качества кода.
@JavaScriptNinja
@JavaScriptNinja 3 года назад
Предложите решение для мира JS?
@alexs7931
@alexs7931 3 года назад
Пусть остаётся так, если в vue2 нет интерактивности(реактивности) на foo, то это даже хорошо, что бы не менялась структура items. 😁
@Owner0
@Owner0 Год назад
мне кажется что если не жестко типизированый язык то проще понимать и писать его
@alexs7931
@alexs7931 Год назад
@@Owner0 когда много часов подряд работаешь с кодом , контроль типов в ручную становится проблемой. Речь не о скиле, а о издержках на рутину.
@yoursleepandrelaxation6948
@yoursleepandrelaxation6948 2 года назад
Короче я понял. У сеньоров есть такая забава - придумывать себе проблему и потом пытаться ее решить. Весь сыр бор из-за того что он создал новый объект за пределами data и его изменяет
@teizer1122
@teizer1122 2 года назад
так он не создал новое коневое поле в не data, он просто запушил в массив новый элемент и уже его изменял
@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 увы, ещё кое-где просят. Сам обычно пытаюсь вразумить или побороть высокими эстимейтами, но если клиент сильно хочет, то приходится.
@uran1980video
@uran1980video 3 года назад
Интересно, а Минин эти ньансы объясняет? вопрос риторический =)
@DES2048
@DES2048 3 года назад
Об этом написано в документации ко 2му vue, это не какие-то сакральные знания
@JavaScriptNinja
@JavaScriptNinja 3 года назад
Смотря о чем. Если о различии в поведении вью3 и вью2 - то у меня ушло время чтобы сделать код, который работает во вью2 но не работает во вью3 (не наоборот)
@mikhailsorokin3830
@mikhailsorokin3830 3 года назад
@@DES2048 спасибо большое.А нахрена Минин делает курсы,ведь все,что он говорит,является на 95% текстом доки
@DES2048
@DES2048 3 года назад
@@mikhailsorokin3830 его курсы рассчитаны на совсем новичков, и к слову сказать, во фронт я вполне нормально выкатился благодаря его курсам, правда бесплатным на RU-vid.
@alexs7931
@alexs7931 3 года назад
У Минина есть видео о Proxy, кажется о нововведениях в js. Норм видео чо :)
@tomitomion1179
@tomitomion1179 3 года назад
Ну его нафиг это ваш codesandbox
@Owner0
@Owner0 Год назад
я тоже так подумал
@faizulla5838
@faizulla5838 3 года назад
Что бы понять, что говорит Профессор.... сперва почитай что говорят кандидаты и доктора внизу в комментах Нельзя было немного структурировать? и этот детский лепет-обсуждение с самим собой немного отвлекает. Сам материал взрыв мозга!
@ИванИванов-ц5ю6х
@ИванИванов-ц5ю6х 3 года назад
Меня одного напрягает сумбурная подача материала с водичкой?
@gerda-morozova
@gerda-morozova 3 года назад
Аналогично. Честно говоря меня напрягло, что в примере изменяют не items в data, а объект newItems, который УЖЕ передали в data. Честно - я не знаю кто будет так делать, но, я так полагаю это просто показательный пример, чтобы узнать про тонкости реактивности.
Далее
#13 Компоненты - Vue.js: концепции
1:07:35
Vue. Composition API vs Options API
9:32
Просмотров 7 тыс.
XOR Шифрование [002]
19:36
Просмотров 79