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

Sdílet
Vložit
  • čas přidán 7. 09. 2024

Komentáře • 140

  • @alexitu
    @alexitu Před 3 lety +87

    Понял то, что к этому видео нужно будет вернуться еще пару раз.

    • @user-hc7tf5fd3g
      @user-hc7tf5fd3g Před 3 lety +7

      Я после каждого видео понимаю, что нужно будет к ним вернуться))

    • @alexitu
      @alexitu Před 3 lety +5

      @@user-hc7tf5fd3g да, это хороший способ, главное не сразу возвращаться, а дать мозгу передышку и время на осмысление)

    • @faizulla5838
      @faizulla5838 Před 3 lety +7

      Учитывая что Реакт это "камасутра" ...а ВЬЮИ это НИНЗЯ .... то к ангуляру вообще опасно подходить ....

    • @mikhalpalych
      @mikhalpalych Před rokem

      Это значит только то что чел так объяснил. Бинг мне сейчас этот аспект за минут 5 разжевал

  • @ekaterinakrutakova9781
    @ekaterinakrutakova9781 Před 3 lety +51

    Это очень важное объяснение, к слову! Спасибо за контент 👍

  • @user-md5mw1tp3e
    @user-md5mw1tp3e Před 3 lety +22

    Вот такие тонкости очень сложно отлавливать. Спасибо огромное за разъяснение!

  • @user-rj6ro3mp1p
    @user-rj6ro3mp1p Před 3 lety +8

    Пожалуй завтра на свежую голову еще раз посмотрю. 😁

  • @jackdrengr5069
    @jackdrengr5069 Před 3 lety +11

    Спасибо Вам, Илья. Фундаментальные знания в таких вещах крайне полезны.

  • @isfland
    @isfland Před 3 lety +26

    Даже учитывая, что у меня уже есть опыт в разработке на Vue, было сложно следить за мыслью. Вторая версия, третья версия, геттеры, сеттеры, прокси, все в перемешано в едином чане. Контент отличный, но было бы круто поработать ещё над структурой подачи.

    • @corey4448
      @corey4448 Před rokem

      У человека есть проблема - реактивность в его новом проекте не работает. Он находит этот видос, смотрит, и понимает что не так. Если у тебя есть опыт в разработке на Вью, но видос типа сложен, то скорее всего с такими нюансами мог просто не столкнуться, например когда проект мейнтейнишь, а не с нуля делаешь.

  • @kusov4748
    @kusov4748 Před 3 lety +4

    Круто, получается новая реактивность круче за счёт того что исключаются неочевидные изменения стейта через сторонние объекты

  • @user-yu2kp5vd1m
    @user-yu2kp5vd1m Před 3 lety +2

    Посмотрев видео второй раз, намного лучше всё понял:)
    Спасибо за подробное обьяснение

  • @ivanfedorov7934
    @ivanfedorov7934 Před 3 lety +5

    отличное видео такие тонкости объясняются - это дорогого стоит

  • @Vladislav3329RUS
    @Vladislav3329RUS Před rokem +1

    Сегодня на собесе спросили этот вопрос, ответил неверно, сейчас для меня прям откровение)

  • @gerasim_vol
    @gerasim_vol Před 3 lety +11

    Крутой контент. Спасибо!

  • @dimwel
    @dimwel Před 3 lety +1

    Розбійник - ключ до розуміння відмонності Вю2 від Вю3 ))

  • @user-wv9ds4ft6d
    @user-wv9ds4ft6d Před 6 měsíci

    Фига себе!! Вот это объяснение) и такое красивое) получила удовольствие от просмотра)

  • @faizulla5838
    @faizulla5838 Před 3 lety +1

    Рад что начал с Vue тут хоть додзё .... а у тех кто пошел в React .... там Самураии и у них Камасутра.... Димыч там всех ...... во всех позах.

  • @wwiiktor
    @wwiiktor Před 3 lety +11

    Чем дальше в лес, тем меньше желающих :D

  • @SchnippSchnappShnappi
    @SchnippSchnappShnappi Před 5 měsíci

    Спасибо большое, стало все гораздо яснее!

  • @user-qg8mw4jx7s
    @user-qg8mw4jx7s Před 3 lety +1

    Курс просто бомба!!! Воистину it`s over 9000!!!!

  • @dudundich6280
    @dudundich6280 Před 3 lety +7

    В подобных примерах Нужен заголовок!!! для vue2 `Vu2 ` и для vue3 соотв-щий
    Зы. приходится вспоминать контекст при переключении экранов с версиями vue - запутывает ....(отматываем назад слушаем - а это про ...vue2 ....)
    ибо не сразу заметил - см. url ...

    • @user-rj6ro3mp1p
      @user-rj6ro3mp1p Před 3 lety +1

      Да, есть такое, тоже иногда путался немного.
      А если ставить на паузу и пытаться разглядеть (на компьютере), то название видео перекрывает название вкладок.

    • @cikada3398
      @cikada3398 Před 3 lety +1

      там в названии проекта еще версия указана)

  • @SansHAP
    @SansHAP Před 3 lety +1

    Илья, в этом видео все супер. Очень радует, что наконец в этом плане Vue начал вести себя ожидаемо.
    А в телеге так и не получил ответ на заданный вопрос ((

  • @MegaTesei
    @MegaTesei Před rokem

    Ты такой красавчик! Я как ребёнок тебя слушаю)😶‍🌫

  • @romanmalkevych6425
    @romanmalkevych6425 Před 2 lety +1

    Годний відос) Дякую)

  • @user-io2kp7jm6z
    @user-io2kp7jm6z Před 3 lety +1

    Лучшее объяснение, спасибо!

  • @AndKozinsky
    @AndKozinsky Před 3 lety

    Написал похожий пример на 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
    Вью автоматически оборачивает не только корневые данные, но и все вложенные. То есть это обёртки рекурсивно оборачивающие данные в которых находятся другие обёртки с данными.

  • @yurastasyuk5783
    @yurastasyuk5783 Před 3 lety

    Дуже цікаво, дякую👍

  • @levdau
    @levdau Před 3 lety

    Замечательные видео! Спасибо!

  • @yakovlev_io
    @yakovlev_io Před 3 lety +1

    Спасибо за крутое объяснение)

  • @PeterShumski
    @PeterShumski Před 2 lety

    Топ контент, спасибо Илья!

  • @angelproduction4047
    @angelproduction4047 Před 3 lety

    Дуже круто, дуже дякую!

  • @user-rg5tk3sw6v
    @user-rg5tk3sw6v Před 3 lety +2

    Спасибо за объяснение, было очень интересно и информативно. Как раз хотел начать изучать вью после реакта. А как освоюсь с первым, попробую и Angular.

    • @redhook777
      @redhook777 Před 3 lety

      Vue быстро освоишь, а вот с ангуляром придется попотеть

  • @alexanonymous5823
    @alexanonymous5823 Před 3 lety

    просто огонь=)) спасиб огромное=))

  • @alexanderx7959
    @alexanderx7959 Před rokem

    а вот это - интересно )

  • @maryanakachanava1049
    @maryanakachanava1049 Před 3 lety +3

    Не будет ли проблем во Vue3, если ты сам проксируешь объекты для своих целей?
    Насколько я понимаю, если обернуть уже запроксированный объект в прокси, заданные хуки как бы сливаются, поэтому по идее все должно быть ок.

    • @Owner0
      @Owner0 Před rokem

      да будут проблемы если я правильно понял так лучше не делать. Тпо нужно напрямую только с реативными данными работать

  • @valerye.8785
    @valerye.8785 Před 3 lety +2

    А я когда пробовал работать с Vue 3 думал что он сломанный :)

  • @bohdans.1479
    @bohdans.1479 Před 2 lety

    Прикольно)

  • @user-mg3ul1zb3s
    @user-mg3ul1zb3s Před 3 lety +1

    🔥🔥🔥

  • @Antonio-fm1sq
    @Antonio-fm1sq Před 3 lety

    Спасибо

  • @artemzlobin4054
    @artemzlobin4054 Před 3 lety +3

    Правильно ли я понял, что Вью3 теперь по "реактивности" больше похож на Реакт, чем на Вью2? Какая разница, использовать this.foo = bar или this.set('foo', 'bar'), если origObj.foo = bar не работает. Вы же сами говорили, что возможность не знать ничего про Вью, то есть про this, это основное отличие Вью от Реакта?

  • @faizulla5838
    @faizulla5838 Před 3 lety +2

    Что бы понять, что говорит Профессор.... сперва почитай что говорят кандидаты и доктора внизу в комментах
    Нельзя было немного структурировать? и этот детский лепет-обсуждение с самим собой немного отвлекает.
    Сам материал взрыв мозга!

  • @user-lz1wb8yr1q
    @user-lz1wb8yr1q Před rokem

    во что превращается прокси когда бабель компилит его для старих браузеров?

    • @JavaScriptNinja
      @JavaScriptNinja  Před rokem +1

      Ни во что. Бабель не умеет комрилировать прокси

    • @user-lz1wb8yr1q
      @user-lz1wb8yr1q Před rokem

      @@JavaScriptNinja понял спс.

  • @user-jd2xr7bf2t
    @user-jd2xr7bf2t Před 3 lety +1

    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 Před rokem

      может что вручную меняется значение ? но я тоже не особо понимаю

  • @stanislav5846
    @stanislav5846 Před 2 lety

    MERCI MERCI MERCI

  • @user-rz7xz4wf8p
    @user-rz7xz4wf8p Před rokem +1

    Уже пердставил боль переноса крупного проекта с Vue2 на Vue3 😭

  • @user-ed7wi6xn5n
    @user-ed7wi6xn5n Před 3 lety +1

    Вопрос по поводу czcams.com/video/tt6VERYoBwE/video.html Когда мы напрямую изменили newItem, что произошло с объектом обернутым в прокси? Насколько я понял, его значение тоже изменилось, но в обход прокси, поэтому хоть и не сработала реактивность, но само значение в объекте внутри прокси поменялось? Если мы сравним значения поля price у newItem и у последнего элемента в this.items, то оно будет одинаковым?

    • @user-ed7wi6xn5n
      @user-ed7wi6xn5n Před 3 lety +1

      Уже проверил в 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";

    • @user-ed7wi6xn5n
      @user-ed7wi6xn5n Před 3 lety +2

      В общем, мне кажется есть смысл отдельно осветить, что хотя в vue3 мы не увидели изменений на экране, это не значит, что данные не изменились.

    • @SansHAP
      @SansHAP Před 3 lety

      @@user-ed7wi6xn5n так в видео о подходе применения реактивности во 2 и 3 версиях, а не о полях объектов. Было же сказано, что ссылки идут на один и тот же объект. Разница лишь в том, что в 3 версии массив Items оборачивается в прокси и любой объект, который записывается в этот Items - проксируется автоматически (попадает в Items не напрямую).
      "this.items[this.items.length - 1].price = this.items[this.items.length - 1].price и это не сработало" - а что должно сработать, если ничего не поменялось?

    • @user-ed7wi6xn5n
      @user-ed7wi6xn5n Před 3 lety +1

      @@SansHAP в общем, для меня было не очевидно, что мы всё таки изменили объект находящийся в массиве, но эти изменения просто не отобразились.
      this.items[this.items.length - 1].price = this.items[this.items.length - 1].price
      Я надеялся, что раз я присваиваю через прокси, пусть и то же самое значение, сработает реактивность и обновится отображаемая информация.

    • @andreygokhan6893
      @andreygokhan6893 Před 3 lety

      @@user-ed7wi6xn5n Описывая ловушку в прокси, только вы можете решить при каких условиях будет срабатывать побочный эффект присвоения - обновление контента html элемента ("реактивность":)) и естественно чтобы напрасно не тревожить дом вы обязательно должны проверять равенство старого и нового значения.

  • @ds40a
    @ds40a Před 2 lety +1

    вот то, что попало за "мембрану" не ссылается уже на newItem как вы нарисовали, а есть его не тождественная копия. Вы же сами показали в коде console.log(this.items[this.items.length - 1] === newItem) FALSE Из-за чего изменения в newItem никак не отображаются в его копии за "мембраной". А вообще в данном случае отсутствие явной типизации в языке иллюстрирует как на ровном месте заработать себе кучу проблем. Потому как в версии 3 массив уже не массив, а Proxy и поведение коренным образом отличается, а понять ето просто читая код нет никакой возможности.

    • @JavaScriptNinja
      @JavaScriptNinja  Před 2 lety

      Суть вьюшного прокси как раз в том, что не отличается :)

    • @slaty331
      @slaty331 Před 2 lety

      не совсем понимаю при чем тут типизация. Мы обратились к 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()

  • @yehudavolodin1183
    @yehudavolodin1183 Před 3 lety +1

    жесть

  • @yoursleepandrelaxation6948

    Короче я понял. У сеньоров есть такая забава - придумывать себе проблему и потом пытаться ее решить. Весь сыр бор из-за того что он создал новый объект за пределами data и его изменяет

    • @teizer1122
      @teizer1122 Před 2 lety

      так он не создал новое коневое поле в не data, он просто запушил в массив новый элемент и уже его изменял

  • @Viktorres1
    @Viktorres1 Před 2 lety +1

    Vue 2 - розбійник)

  • @gunini_kirill
    @gunini_kirill Před rokem

    С первого и двоимого раза не понял. Вернулся снова через 3 дня и как понял)

  • @DavitAve
    @DavitAve Před rokem

    Через два дня на собес должен идти по vue middle рол года как не работал с vue только react что будет фиг знает)))))

  • @stabby6521
    @stabby6521 Před 3 lety

    Объясните пожалуйста, как вывод в консоль перед пушем в объект, вывел содержимое, когда его там еще не должно быть:?

    • @JavaScriptNinja
      @JavaScriptNinja  Před 3 lety +4

      потому что консоль хрома "ленивая" - отображает последнее состояние объекта

    • @stabby6521
      @stabby6521 Před 3 lety

      @@JavaScriptNinja воу, раньше не замечал. Прикольно

  • @r2r4ik
    @r2r4ik Před 3 lety +1

    А что не так с codepen???

    • @dimariskhakov1057
      @dimariskhakov1057 Před 3 lety +1

      Подозреваю, что в codepen нет SFC, в то время как Sandbox максимально близко имитирует разработку на локалке

  • @alexs7931
    @alexs7931 Před 3 lety

    А как же в .Net web приложениях(на сервере по крайней мере)? Там всё жёстко типимизированно, в массив items нельзя добавить значение foo не описав его в интерфейсе.
    Это я клоню в сторону жёсткой типимизации , с целью контроля качества кода.

    • @JavaScriptNinja
      @JavaScriptNinja  Před 3 lety

      Предложите решение для мира JS?

    • @alexs7931
      @alexs7931 Před 3 lety

      Пусть остаётся так, если в vue2 нет интерактивности(реактивности) на foo, то это даже хорошо, что бы не менялась структура items. 😁

    • @Owner0
      @Owner0 Před rokem

      мне кажется что если не жестко типизированый язык то проще понимать и писать его

    • @alexs7931
      @alexs7931 Před rokem

      @@Owner0 когда много часов подряд работаешь с кодом , контроль типов в ручную становится проблемой.
      Речь не о скиле, а о издержках на рутину.

  • @user-kg6fz5tz2b
    @user-kg6fz5tz2b Před 3 lety

    Спасибо! Нет возможности сейчас смотреть, видео останутся на CZcams?

  • @Fillit4
    @Fillit4 Před 3 lety

    Так, ну а во Vue4 на чем будет реализована реактивность после проксей Vue3 ? )

  • @Shadzen
    @Shadzen Před 3 lety

    Получается вью3 старые браузеры не поддерживают? А как же ие10 и андройд 4.2? Для бизнеса это важно, никто не хочет терять дополнительных клиентов.

    • @JavaScriptNinja
      @JavaScriptNinja  Před 3 lety +2

      Обещали совместимый билд, но он будет вести себя как вью2

    • @jackdrengr5069
      @jackdrengr5069 Před 3 lety +4

      IE10 - это Windows 7, поддержку которой сам Microsoft сворачивает вовсю. Может и сторонним разработчикам пора остановиться? Семёрка - отличная ОС, но, увы, ее время подходит к концу.

    • @andreygokhan6893
      @andreygokhan6893 Před 3 lety +1

      По мере возможности помогаю таким "клиентам". Устанавливаю им Хром удаляю ярлыки ИЕ и говорю: Интернет поменял кнопочку и теперь кнопочка интернета выглядит так. "Клиенту" достаточно одного сайта - домашней страницы иначе "клиент" может заблудиться.

    • @grantorino3465
      @grantorino3465 Před 3 lety +2

      Не смешите, уже об ie11 забыли, какой еще 10???

    • @jackdrengr5069
      @jackdrengr5069 Před 3 lety

      @@grantorino3465 увы, ещё кое-где просят. Сам обычно пытаюсь вразумить или побороть высокими эстимейтами, но если клиент сильно хочет, то приходится.

  • @stow1x
    @stow1x Před 3 lety +5

    Розбійники тут?

  • @uran1980video
    @uran1980video Před 3 lety

    Интересно, а Минин эти ньансы объясняет? вопрос риторический =)

    • @DES2048
      @DES2048 Před 3 lety

      Об этом написано в документации ко 2му vue, это не какие-то сакральные знания

    • @JavaScriptNinja
      @JavaScriptNinja  Před 3 lety +1

      Смотря о чем. Если о различии в поведении вью3 и вью2 - то у меня ушло время чтобы сделать код, который работает во вью2 но не работает во вью3 (не наоборот)

    • @mikhailsorokin3830
      @mikhailsorokin3830 Před 3 lety

      @@DES2048 спасибо большое.А нахрена Минин делает курсы,ведь все,что он говорит,является на 95% текстом доки

    • @DES2048
      @DES2048 Před 3 lety +1

      @@mikhailsorokin3830 его курсы рассчитаны на совсем новичков, и к слову сказать, во фронт я вполне нормально выкатился благодаря его курсам, правда бесплатным на CZcams.

    • @alexs7931
      @alexs7931 Před 3 lety

      У Минина есть видео о Proxy, кажется о нововведениях в js. Норм видео чо :)

  • @tomitomion1179
    @tomitomion1179 Před 3 lety +2

    Ну его нафиг это ваш codesandbox

    • @Owner0
      @Owner0 Před rokem

      я тоже так подумал

  • @user-bn2qt4ge9x
    @user-bn2qt4ge9x Před 3 lety +6

    Меня одного напрягает сумбурная подача материала с водичкой?

    • @gerda-morozova
      @gerda-morozova Před 2 lety +1

      Аналогично. Честно говоря меня напрягло, что в примере изменяют не items в data, а объект newItems, который УЖЕ передали в data. Честно - я не знаю кто будет так делать, но, я так полагаю это просто показательный пример, чтобы узнать про тонкости реактивности.

  • @IvanIsayev
    @IvanIsayev Před 3 lety +1

    Спасибо за контент! Очень полезное видео!